Solid

为什么我们无法写出真正可重用的代码?

匆匆过客 提交于 2021-01-29 09:46:19
作者 | Daniel B. Markham 译者 | 王者 策划 | 万佳 为什么实现组件可重用性如此之难? 几周前,Uwe Friedrichsen 在他一篇博文中提出一个这样的问题: ……可重用性是软件的制胜法宝:每当一个新的架构范式出现,“可重用性”就成了是否采用该范式的一个核心考虑因素。业务通常会这样认为:“转向新范式在一开始需要多付出一些成本,但因为可重用,所以很快就会从中获得回报”……但简单地说,任何基于可重用的架构范式从来都不会像承诺的那样,而且承诺总是无法兑现…… 他例举了 CORBA、基于组件的架构、EJB、SOA 等例子,然后就问微服务是否会带来不一样的结果。 为什么可重用性的承诺总是无法兑现?为什么我们无法写出真正可重用的代码? 这些都是很好的例子,Friedrichsen 很好地解释了为什么实现可重用性是如此困难。然而,我相信,他忽略了关键的一点:经典的面向对象编程(OO)和纯函数式编程(FP)在可重用性方面会有截然不同的结果,因为它们基于不同的假设。 我们来做个实验,分别用 F# 和 C# 以 FP 和 OO 的方式来实现“FizzBuzz”游戏。 首先是 F#: let (|DivisibleBy|_|) by n = if n%by=0 then Some DivisibleBy else None let findMatch = function

Python之路 第十一篇--CSS

青春壹個敷衍的年華 提交于 2021-01-27 05:34:03
css   CSS是Cascading Style Sheets的简称,中文称为 层叠样式表 ,用来控制网页数据的表现,可以使网页的表现与数据内容分离。 一.css的四种引入方式 1.行内式     行内式是在标记的style属性中设定CSS样式。这种方式没有体现出CSS的优势,不推荐使用。 1 < div style='font-size:20px;'> Hello </ div > 2.嵌入式     嵌入式是将CSS样式集中写在网页的<head></head>标签对的<style></style>标签对中。格式如下: 1 2 3 4 5 6 7 8 9 < head > < meta charset="UTF-8"> < title >Document</ title > < style type="text/css"> div{ font-size: 20px; } </ style > </ head > 3.导入式     将一个独立的.css文件引入HTML文件中,导入式使用CSS规则引入外部CSS文件,<style>标记也是写在<head>标记中,使用的语法如下: 1 2 3 4 5 < head > < style type="text/css"> @import"mystyle.css"; 此处要注意.css文件的路径 </ style > </ head >

一篇博文教会你学习CSS盒子模型(五)

梦想与她 提交于 2021-01-26 10:45:29
走的越远你就越会发现 真正能在危难之时拉你一把的人 只有你自己 前段时间跟家里打视频电话 每每看到家人关怀的目光以及她们逐渐苍老的面庞 就不忍心再对他们言哭言累 有时午夜辗转反侧脑海里一想到他们 就会想自己最近浑浑噩噩的状态是不是真的挺对不起他们的 5.1_盒子模型概述 5.1.1_认识盒子模型 所谓盒子模型就是把 HTML 页面中的元素看作是一个矩形的盒子,也就是一个盛装内容的容器。每个矩形都由元素的内容、内边距、边框和外边框组成。 <!doctype html> < html > < head > < meta charset = " utf-8 " > < title > 认识盒子模型 </ title > < style type = " text/css " > .box { width : 200px ; /*盒子模型的宽度*/ height : 50px ; /*盒子模型的高度*/ border : 15px solid red ; /*盒子模型的边框*/ background : #CCC ; /*盒子模型的背景颜色*/ padding : 30pх ; /*盒子模型的内边距*/ margin : 20px ; /*盒子模型的外边距*/ } </ style > </ head > < body > < p class = " box " > 盒子中包含的内容 </

canvas绘制工作流之绘制节点

孤人 提交于 2021-01-24 00:17:41
上一篇我们介绍了 canvas 绘制工作流的大概步骤,接下来会有系列文章细致的介绍怎么用 canvas 绘制工作流;这篇文章主要介绍用 canvas 绘制流程节点。 绘制前我们需要先准备一张节点图片,例如: ;好了,正题开始: 在 html 中添加 canvas 标签: < canvas id ="canvasId" width = "800" height ="600" style ="border:1px solid black; margin-left: 1px;" ></ canvas > 这里要注意设置 canvas 标签的宽度跟高度,也就是要设置画布的宽度跟高度。 获取画布对象并初始化画布参数 var _canvas= document.getElementById(“canvasId”); var _height = _canvas.height; // 获取画布高度 var _width = _canvas.width; // 获取画布宽度 Var ctx =_canvas.getContext('2d' ); // 画个画布大小的长方形,目的是为了有个好看的小边框框 ctx.clearRect( 0, 0 , _width, _height); /* 绘制画布的背景线*/ // 设置线宽 ctx.lineWidth = 0.1 ; //绘制纵向背景线 for (

秒杀系统设计

对着背影说爱祢 提交于 2021-01-23 07:04:37
<div class="output_wrapper" id="output_wrapper_id" style="font-size: 15px; color: rgb(62, 62, 62); line-height: 1.8; word-spacing: 2px; letter-spacing: 2px; font-family: 'Helvetica Neue', Helvetica, 'Hiragino Sans GB', 'Microsoft YaHei', Arial, sans-serif; background-image: linear-gradient(90deg, rgba(50, 0, 0, 0.05) 3%, rgba(0, 0, 0, 0) 3%), linear-gradient(360deg, rgba(50, 0, 0, 0.05) 3%, rgba(0, 0, 0, 0) 3%); background-size: 20px 20px; background-position: center center;"><h3 id="h1" style="color: inherit; line-height: inherit; padding: 0px; margin: 1.6em 0px; font-weight: bold; border

Vue.js之常用指令

試著忘記壹切 提交于 2021-01-23 04:50:08
vue常用指令 vue.js官方给自己的定义是数据模板引擎,并给出了一套渲染数据的指令.本文详细介绍vue.js的常用指令. 官网: 点我 一.v-text、v-html v-text:用于绑定文本 v-html:用于绑定html < div id ="app" > < p > 姓名: < label v-text ="Name" ></ label ></ p > < p > 姓名:{{Name}} </ p > < div v-html ="Age" > 年龄: </ div > </ div > < script > new Vue({ el: " #app " , data: { Name: " corn " , Age: " <label>20</label> " } }) </ script > =======================> 姓名:corn 姓名:corn 20 1.{{Name}}这种写法和v-text的作用是相同的,用于绑定标签的text属性,如果标签没有text属性,该绑定会失效,比如在一个文本框上面使用v-text时没有效果的. 2.从结果看出,v-html绑定后会覆盖原来标签标签里面的内容,此处是覆盖,而并非append. 3.对于v-html应用时要慎重,在网站上会动态渲染任意html有一定的危险存在,因此容易导致XSS跨站脚本攻击

快速学会使用Java创建PowerPoint演示文稿

我是研究僧i 提交于 2021-01-22 13:35:16
PowerPoint演示文稿使您可以创建包含文字,图形,图表,动画和其他元素的精美幻灯片,以使演示文稿更具吸引力。在本文中,将学习如何使用Java实现PowerPoint自动化功能。特别是,将了解如何使用Java创建PowerPoint演示文稿并向幻灯片中添加各种元素。 使用Java创建PowerPoint演示文稿 打开现有的PowerPoint演示文稿 将幻灯片添加到演示文稿 将文本添加到演示文稿的幻灯片 在演示文稿中创建表 向演示文稿添加图像 为了实现PowerPoint自动化功能,Aspose提供了Java API的Aspose.Slides。该API可以轻松地从Java应用程序中创建,编辑,转换和操作PowerPoint演示文稿。 >>你可以 点击这里下载 Aspose.Slides for java最新版测试体验。 使用Java创建PowerPoint演示文稿 首先从PowerPoint自动化开始,首先创建一个空的演示文稿文档,然后将其另存为PPTX文件。以下是创建演示文稿文档的步骤。 创建Presentation 类的实例 。 使用Presentation.save(String,SaveFormat) 方法将其另存为PPTX 。 下面的代码示例演示如何使用Java创建PowerPoint演示文稿。 // Instantiate a Presentation

pyqt5 GUI教程

我怕爱的太早我们不能终老 提交于 2021-01-21 03:30:01
from PyQt5 import QtCore, QtGui, QtWidgets import sys import qtawesome class MainUi(QtWidgets.QMainWindow): def __init__(self): super().__init__() self.init_ui() def init_ui(self): self.setFixedSize(960, 700) self.main_widget = QtWidgets.QWidget() # 创建窗口主部件 self.main_layout = QtWidgets.QGridLayout() # 创建主部件的网格布局 self.main_widget.setLayout(self.main_layout) # 设置窗口主部件布局为网格布局 self.left_widget = QtWidgets.QWidget() # 创建左侧部件 self.left_widget.setObjectName('left_widget') self.left_layout = QtWidgets.QGridLayout() # 创建左侧部件的网格布局层 self.left_widget.setLayout(self.left_layout) # 设置左侧部件布局为网格 self.right

CSS 清除浮动

蓝咒 提交于 2021-01-19 03:54:34
一、为什么要清除浮动   浮动本质是用来做文字混排效果的,但是拿来做布局用,则会有很多的问题出现。   由于浮动元素不再占用原文档流的位置,所以它会对后面的元素排版产生影响,为了解决这些问题,就需要在该元素中清除浮动,准确地说,并不是清除浮动,而是 清除浮动后造成的影响 。 二、清除浮动的本质   清除浮动主要为了解决父级元素因为子级浮动引起内部高度为 0 的问题。           三、清除浮动的方法    清除浮动本质叫做闭合浮动更好一些。清除浮动就是把浮动的盒子圈到里面,让父盒子闭合出口和入口不让他们出来影响其他元素。    clear 属性用于清除浮动,其基本语法格式如下: 选择器 {clear:属性值;} 属性值 描述 left 不允许左侧有浮动元素(清除左侧浮动的影响) right 不允许右侧有浮动元素(清除右侧浮动的影响) both 同时清除左右两侧浮动的影响    方法1:给父级 div 定义 height     Demo: 1 <style type="text/css"> 2 .div1 { background : #000080 ; border : 1px solid red ; /* 解决代码 */ height : 200px ;} 3 .div2 { background : #800080 ; border : 1px solid red ;

一篇文章带你了解CSS clear both清除浮动

对着背影说爱祢 提交于 2021-01-18 17:03:33
一、前言 CSS clear both清除产生浮动 ,使用了css float浮动会产生css浮动,这个时候就需要清理清除浮动,就用clear样式属性即可实现。 二、clear语法与结构 1. clear语法 clear : none | left|right| both 2. clear参数值说明 属性 描述 none 允许两边都可以有浮动对象 bot 不允许有浮动对象 left 不允许左边有浮动对象 right 不允许右边有浮动对象 3. clear解释 该属性的值指出了不允许有浮动对象的边情况,对象左边不允许有浮动、右边不允许有浮动、不允许有浮动对象。 4. css结构 div { clear: left } div { clear: right } div { clear: both } 三、div clear常用的情况 最常用是使用clear:both清除浮动。 比如一个大对象内有2个小对象使用了css float样式为了避免产生浮动,大对象背景或边框不能正确显示,这个时候就需要 clear:both 清除浮动。 四、案例 1. 案例说明 设置一个css宽度(css width)为500px; 盒子(div ),css边框(css border)为红色,css背景(css background)为黑色、css padding为10px盒子,里面包裹着2个小盒子,一个css