设计思想

MVC设计思想

早过忘川 提交于 2020-04-06 21:52:48
MVC(Model View Controller)是一种软件设计的框架模式,它采用模型(Model)-视图(View)-控制器(controller)的方法把业务逻辑、数据与界面显示分离。把众多的业务逻辑聚集到一个部件里面,当然这种比较官方的解释是不能让我们足够清晰的理解什么是MVC的。用通俗的话来讲,MVC的理念就是把数据处理、数据展示(界面)和程序/用户的交互三者分离开的一种编程模式。 MVC框架模式是一种复合模式,MVC的三个核心部件分别是 (1)最上面的一层,是直接面向最终用户的"视图层"(View)。它是提供给用户的操作界面,是程序的外壳。 (2)最底下的一层,是核心的"数据层"(Model),也就是程序需要操作的数据或信息。 (3)中间的一层,就是"控制层"(Controller),它负责根据用户从"视图层"输入的指令,选取"数据层"中的数据,然后对其进行相应的操作,产生最终结果。 这三层是紧密联系在一起的,但又是互相独立的,每一层内部的变化不影响其他层。每一层都对外提供接口(Interface),供上面一层调用。这样一来,软件就可以实现模块化,修改外观或者变更数据都不用修改其他层,大大方便了维护和升级。 来源: https://www.cnblogs.com/luckyjcx/p/12644213.html

多线程设计模式——Read-Write Lock模式和Future模式分析

橙三吉。 提交于 2020-04-02 22:49:45
目录 多线程程序评价标准 任何模式都有一个相同的“中心思想” Read-Write Lock 模式 RW-Lock模式特点 冲突总结 手搓RW Lock模式代码 类图 Data类 P.S. Before/After模式 ReadWriteLock类 正确运行结果 适用场合 “逻辑锁”vs“物理锁” 性能对比 “中心思想”分析 Future 模式 Future模式特点 手搓Future模式代码 类图 Main类 Host类 FutureData类 RealData类 运行结果 模式分析 与生产者-消费者模式有区别吗? 模式拓展 模式思考 Future模式“中心思想” 伟大的Concurrent包! RW Lock模式 Future模式 示例程序代码 本文内所有实现的代码均附在文末,有需要可以参考。 (好奇宝宝们可以粘贴下来跑一下 多线程程序评价标准 安全性: ​ 安全性就是不损坏对象。也就是保证对象内部的字段的值与预期相同。 生存性: ​ 生存性是指无论什么时候,必要的处理都一定能够执行。失去生存性最典型的例子就是“死锁”。 可复用性: ​ 指类能够重复利用。若类能够作为组件从正常运行的软件里分割出来,说明这个类有很高的复用性。 性能: ​ 指能够快速、大批量地执行处理。主要影响因素有:吞吐量、响应性、容量等。 这里还要再区分一下这四条。 前两条 是程序 正常运行 的必要条件;

React 框架的设计思想及源码结构

£可爱£侵袭症+ 提交于 2020-04-01 10:45:12
当前前端三大框架(vue、react和angular),除了vue之外,国内用得最多的就是react了,之前一直对其实现原理比较好奇,在花了很多时间深入研究了其源码实现后,本篇开始记录一下 同样的功能,用vue和react都能实现,相比较vue,react的学习门槛比较高,但是好处是它非常灵活,执行的效率更高(用到了很多新的技术),我个人觉得react的代码和vue的代码就像linux和windows,前者很注重javascript功底(类似linux的shell命令),后者有很多现成的html扩展标签指令( v-for、v-if等,类似windows的图形界面),所以如果一个人的js语言研究得比较深入,和一个刚刚入门js语言的程序员来说,用React实现了同样的需求,敲出来的代码质量会差很多的 react更加的纯粹,这里的纯粹指的是什么的,在react内部,jsx模板经babel转化后是一个对象,所有的操作都是基于这个对象和其对应的fiber结构来操作的。 vue和react有许多共同点,比如: 都使用了虚拟DOM 更新时都使用了diff算法进行了优化 react和vue的不同之处如下 writer by:大沙漠 QQ:22969969 vue框架 react框架 实现原理 将模板转化成一个render函数来执行 将每个节点转化为fiber对象,最终形成一个fiber树结构

c++为什么要面向对象?

夙愿已清 提交于 2020-04-01 07:58:13
前言   c和c++的区别是什么?不可置否,最重要的就是c++的编程思想是面向对象,而c的编程思想是面向过程,这是它们的本质区别,如果你在使用c++编程时使用的还是面向过程的编程思想,那么还不如使用c,因为这样的做法已经丢掉了c++的思想精髓。在学习一门语言时,最重要的是学习它的设计思想,因为语法都是大同小异的,很快便可以掌握。那么面向过程和面向对象编程的发展历史如何,区别是什么,各自的优缺点是什么,且听我一一道来。    一、“自顶向下,逐步求精”的面向过程程序设计    面向过程程序设计的思想即这样的一种解决思路 - 提出问题,分析问题的处理流程,将大问题分解为小问题,如果小问题比较复杂,就继续划分小问题为更小的问题,然后通过小模块一一解决小问题,最后再根据整个业务流程将这些小问题串在一起(调用函数),这样就达到了解决所有问题的目的,如下:   于是,这样从问题出发,自顶向下、逐步求精的开发思想我们称之为“面向过程程序设计思想”,因为它主要是解决问题中的一个个过程。这种思想也是最早的编程语言的思想,因为它比较符合我们解决问题的方法,其他语言比如早期的Fortran、JavaScript等都是如此。它的优点如下: 优点1:程序结构简单 - 仅由三种基本结构组成   面向过程编程的思想在程序实现上只需要三种控制结构,即顺序、选择、循环。通过这三种基本结构,我们就可以解决任何问题

1、算法初识

痴心易碎 提交于 2020-03-05 12:42:10
1.什么是 算法 ? 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。 也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。 如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。 不同的算法可能用不同的时间、空间或效率来完成同样的任务。 一个算法的优劣可以用空间复杂度与时间复杂度来衡量。 算法中的指令描述的是一个计算,当其运行时能从一个初始状态和(可能为空的)初始输入开始,经过一系列有限而清晰定义的状态,最终产生输出并停止于一个终态。 一个状态到另一个状态的转移不一定是确定的。随机化算法在内的一些算法,包含了一些随机输入。 1.1特征 一个算法应该具有以下五个重要的特征: 有穷性 (Finiteness) 算法的有穷性是指算法必须能在执行有限个步骤之后终止; 确切性 (Definiteness) 算法的每一步骤必须有确切的定义; 输入项 (Input) 一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件; 输出项 (Output) 一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的; 可行性 (Effectiveness) 算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步

掌据这几个设计思想,从单片机小白立马升级为单片机工程师

谁说我不能喝 提交于 2020-02-26 23:30:51
分层思想 分层的思想,并不是什么神秘的东西,事实上很多做项目的工程师本身自己也会在用。看了不少帖子都发现没有提及这个东西,然而分层结构确是很有用的东西,参透后会有一种恍然大悟的感觉。如果说我不懂LCD怎么驱动,那好办,看一下datasheet,参考一下阿别人的程序,很快就可以做出来。但是如果不懂程序设计的思想的话,会给你做项目的过程中带来很多很多的困惑。 参考了市面上各种各样的嵌入式书籍,MCS-51,AVR ,ARM 等都有看过,但是没有发现有哪本是介绍设计思想的,就算有也是凤毛麟角。写程序不难,但是程序怎么样才能写的好,写的快,那是需要点经验积累的。结构化模块化的程序设计的思想,使最基本的要求。然而这么将这个抽象的概念运用到工程实践当中恩?那需要在做项目的过程中经历磨难,将一些东西总结出来,抽象升华为理论,对经验的积累和技术的传播都大有裨益。所以在下出来献丑一下,总结一些东西。 就我个人的经验而谈,有两个设计思想是非常重要的。 一个就是 “时间片轮的设计思想” ,这个对实际中解决多任务问题非常有用,通常可以用这个东西来判断一个人是单片机学习者,还是一个单片机工程师。这个必须掌握。(下文将介绍)。 第二个就是 “分层屏蔽的设计思想” 即分层思想。下面用扫描键盘程序例子作为引子,引出今天说的东西。 问题的提出 单片机学习板一般为了简单起见,将按键分配的很好,例如整个 4*4

构建之法阅读笔记06

﹥>﹥吖頭↗ 提交于 2020-02-19 22:41:39
本周阅读了构建之法的11、12、13。 11章的内容承接前面的章节提到了软件的设计与实现。前面的内容讲了如何解决用户需求,本章则讲了如何解决用户的需求。解决的过程要先进行建模,建模的思想在我以前的学习中就有接触,从小学习数学,而解决数学问题的核心是建立模型,列出式子求解,以前也曾学过数学建模这门课。邹欣老师用鸡兔同笼的例子引入,让人感到十分亲切,使得新概念比较容易理解。分析设计的方法有许多,本书则侧重介绍以图形为主构造的模型,其他方法也大致介绍了一下。然后讲了实现设计的工作流程。 12章讲了用户体验。王老师在课上多次强调过用户需求的重要性,软件工程是与人有关的一门课程。可见用户体验是开发环节中必须重视的。本章讲了用户体验的要素、用户体验设计的步骤和目标、评价标准。看过本章发现原来生活中使用的物品的设计有着很多要考虑的方法,而软件的设计也要注意许多方方面面。以前总是写控制应用台程序,都不怎么考虑用户体验。团队开发时一定要多注意这方面。 13章先讲诉了软件测试方法及分类,这部分内容偏理论。而后讲了实战中测试,先纠正了大家的一些不明确的观点,让大家对知识的理解更深入。测试工作中要有文档的书写,并且这些文档要解决问题。 通过这次阅读,我发现了自己在用户需求方面考虑较少,以至于没有良好的用户体验,还有就是没有建模思想,想到哪写到哪,思路比较乱,所以以后我会注意建立建模思想

接口与抽象类那点事

喜夏-厌秋 提交于 2020-02-08 20:36:20
也谈接口和抽象类区别 好象这是一个老生常谈的问题,最近有个学生问我他们的区别,于是我就又想起这个话题。 有不少的文章在描述这两者,但好象都没有怎么从初学者的浅显角度来看。 其实这两者有很多相识之处,当然也有很多不同之处。要理解它们,应该先从面向对象思想开始。面向对象思想里面,最基本的就是封装,继承和多态。所谓封装,说的小,方法(函数)也就是对一种操作的封装,说的大,用类来描述一个具体的对象。 那么在面向对象程序中应该说对封装还有一层新的定义,即将类的描述抽象化,也就是说描述类的外貌而不去考虑它的实际。 那么我们回过头来看抽象类,它必须被继承使用,描述的其实是一种继承关系,即"is a"的关系。类继承它,也就是说类拥有它所有抽象方法等,那么也就是类遵循了它所定义的规范。但是呢,这种规范是通过继承而来,类的发展必须依赖它的父类。 abstract class 工作 { abstract void 上班() } class 张三 : 工作 { } abstract class 工作 { abstract void 上班() } class 人: 工作 { } class 李四 : 人 { } 我们从这个例子中不难看出,张三和李四同样都遵循抽象工作的规范,都拥有上班这个方法,但是呢,他们的发展始终受到父类的影响。 当然,我这里只是从它们使用的角度来看,我们还能从他们设计角度度来看

【Python入门】——设计思想和生态概览

夙愿已清 提交于 2020-02-08 18:44:51
一、Python设计思维和方法 实例:体育竞技分析 #双人击球比赛:A&B,回合制,5局3胜 #开始时一方先发球,直至判分,接下来胜者发球 #球员只能在发球局得分,15分胜一局 #实例:体育竞技分析.py from random import * def printInfo ( ) : #打印程序的介绍信息 print ( "这个程序模拟两个选手A和B的某种竞技比赛" ) print ( "程序运行需要两个选手A和B的能力值(0到1之间的小数表式)" ) def getInputs ( ) : #获得程序运行参数 a = eval ( input ( "请输入选手A的能力值(0-1): " ) ) b = eval ( input ( "请输入选手B的能力值(0-1): " ) ) n = eval ( input ( "请输入比赛场次: " ) ) return a , b , n def gameOver ( scoreA , scoreB ) : #判断比赛是否结束 if scoreA == 15 or scoreB == 15 : return True else : return False def simOneGame ( probA , probB ) : #模拟进行一场比赛 scoreA , scoreB = 0 , 0 serving = "A" while

YYModel 源码解读 总结

旧时模样 提交于 2020-02-02 06:01:10
在使用swfit写代码的过程中,使用了下oc写的字典转模型,发现有些属性转不成功,就萌生了阅读源码的想法。 其实一直都知道Runtime机制,但并没有系统的学习,可能是因为平时的使用比较少,无意间在github上看到了YYModel ,粗略的看了下源码,发现有大量的c方面的知识,就产生了很大的兴趣,因为c总是性能的代名词吗?于是就有了这几篇文章,其实主要的目的还是对平时所学知识的一个总结。 毕竟,人类的记忆总是容易忘记的。 不知道作者在写这个框架时的思想是怎么样一个过程?但字里行间都流露出对代码的强大的驾驭能力,这点特别值得学习。 阅读完这个框架给我最大的收获就是领悟到代码也是能表达很多事情的,比如说自信,因此决定去阅读更多更好的开源矿建,并记录下来,一来可以帮助到别人,同时也能学习到别人的思想。 好了,说一下,我理解的这样一个字典转模型的思想是什么样? 一 . 在写代码前应该有一个很好的设计,这个设计最起码是有张草图的,并不是天马星空的头脑风暴。 功能草图: 二. 有了上边的图表,就已经很明确我们的目标是什么了。因为市场上已经有这样的框架存在,所以说技术上是肯定能够实现的,可以不同的是实现手段而已。在这里先不对具体的技术进行归类,只是列出一个大概的技术需求 来源: https://www.cnblogs.com/machao/p/5651038.html