《精通.NET企业项目开发》 - 书摘精要
(P7) 处于任何逻辑层面上的类,对于同一层面上的其他类应该是可重用的;对于在同等范围内其他所有需要该数据的类而言,提供数据的类应该是可以被调用的;
(P9) 大多数企业系统都是用平台无关的技术构建的;
(P16) 良好设计的代码必须能进行分解,能够划分为独立的功能块;
(P17) 企业开发通常要求很强的松散耦合度;
(P19) 松散耦合类的真正评价标准是要看针对它编写单元测试的能力;
(P21) 抽象接口是类型解除关联的流行方法,当试图对需要交互的类实现松散耦合时,就需要用到这种方法;
(P35)
在创建软件时,针对可维护性进行设计是最重要的目标之一;
不易改变的最大阻力来自于依赖 —— 即系统中依赖于其他类的那些类。依赖可能出现在代码的各个方面 —— 高层类可能依赖于低层类,反之亦然;
(P46) 灵活性测度的是改变代码的难易程度;
(P47) 重用性测度的是代码的可移植性,以及在软件的其他地方可以重用到什么程度;
(P63)
依赖倒置准则(Dependency Inversion Principle, DIP)就是将类从具体的实现中分离出来,让这些类仅依赖于抽象类或接口;
Robert C. Martin 这样定义 DIP :
(1) 高层模块不应该依赖于低层模块。两者都应该依赖于抽象;
(2) 抽象不应该依赖于细节。细节应该依赖于抽象;
应用 DIP 的第一步是针对每种低层依赖提取接口;
(P65)
依赖注入实现方式:
(1) 构造函数注入 —— 构造函数注入通常应用于重构的最后阶段,它是通过类的构造函数提供依赖的过程;
(2) 设置函数注入 —— 设置函数注入通过设置函数(Setter)属性将依赖模块注入高层模块的过程;
(3) 方法注入 —— 方法注入要求依赖实现一个接口,高层模块会在运行时引用和注入这个接口;
(P68) 设置函数注入方法可能不如构造函数注入那么显而易见,但是,如果在构造函数中需要注入大量的其他依赖,那么将可选的依赖移到基于设置函数的方法可能更加明智,因为这样可以使该类的结构更易于理解;
(P83) 在编写让测试可以通过的代码之前,要先让测试失败;
(P91) 首先要知道基本准则,知道自己正在干什么,然后才能走捷径以提高速度;
(P149)
控制反转是一般准则,依赖注入是该准则的实现;
IoC容器只是一个包含类型和实现的字典;
(P153) 将所有的开发时间都花费在基础结构关注点上并不能更快地构建应用程序;
(P157) 自动连接依赖是使用IoC容器所能获得的最大好处;
(P169) 中间件 —— 是连接软件组件或应用程序的计算机软件;
(P189) 应用程序的主要目的和我们作为开发人员存在的唯一目的就是解决业务问题;
(P190)
业务逻辑层中存在的3种主要模式:事务脚本(Transaction Script)、活动记录(Active Record)和领域模型(Domain Model);
事务脚本是一种非常简单的业务设计模式,它遵循面向过程的开发方式,而不是面向对象的方法。它为每个业务事务创建一个过程,每个过程都包含完成业务事务所需的所有业务逻辑,包括工作流、业务规则和验证检查到在数据库中持久保存的所有内容;
(P191) 事务脚本模式的一个优点是,它非常简单,很易于理解,不需要任何关于该模式的前期知识就很容易明白它的作用。如果有新的业务用例需要处理,那么可以直接添加新方法来处理它,该方法将包含所有相关的业务逻辑;
(P192)
活动记录(Active Record)模式是一个非常流行的模式,当底层的数据库模型与您的业务模型相匹配时,这种模式尤其有效;
在活动记录模式中,每个业务对象都负责它自身的持久化和相关的业务逻辑;
(P194) 领域模型与活动记录模式之间的主要差异是,领域模型的业务实体存在于领域模型之中,它们不知道如何持久化自身,且数据模型和业务模型之间并不一定要存在一对一的映射关系;
(P198)
领域模型模式相比于事务脚本和活动记录模式的另一个优点是,因为领域模型不包含数据访问代码,所以可以容易地对其进行单元测试,而不必模拟和存根这类数据访问层的依赖;
领域模型最重要的一个强项就是处理复杂的业务逻辑,但是当应用程序中包含非常少的业务逻辑时,全面使用领域模型就有些使用过度;
(P200) 学习的最佳方式就是通过示例;
(P255)
数据访问层包括所有的CRUD(创建、读取、更新和删除)方法和查询机制,这使得业务逻辑层能够针对任何给定的条件检索对象;
数据访问层不应该包含任何业务逻辑,并且应该由业务逻辑层通过接口来访问数据访问层;通过接口进行通信能够轻易地替换数据访问层的实现,而不会对软件的合理性产生任何负面影响;
(P256) ORM的作用是在关系模型(数据库)和面向对象模型之间架起一座桥梁;
(P257) DataContext 类负责跟踪改变以及管理标识映射和并发关注点,它是所有进入数据库的入口点的管理器;
(P258) Linq To SQL 包含一个 DataContext 类,该类跟踪数据变化,并保持所有从数据库取出的对象的标识映射;
(P272) Entity Framework 的强大之处在于关系数据模型并不要求与业务模型存在一对一的映射;
(P273) Entity Framework 不仅仅限于数据库。在一个实体模型中可以从很多不同的数据源提取数据,包括对数据源使用服务;
(P288)
持久化透明(Persistence Ignorance)的思想是保持业务对象与数据访问层解除关联,这样业务对象就仅包含与业务逻辑相关的代码;
NHibernate 的一个最佳功能就是对持久化透明的支持 —— 这意味着业务对象不必继承任何基类或实现任何架构接口;
(P321) 对象关系映射器在数据库的关系数据模型与面向对象的领域模型之间架起了一座桥梁(更准确地讲是解决了不匹配问题);
(P324)
MVC将应用程序的前端分解为3个概念层 —— 模型(Model)代表应用程序的数据,视图(View)代表UI中的可见组件,而控制器(Controller)则处理模型和视图之间的数据通信和业务规则;
MVC的首要任务是尽可能地将数据从UI中分离出来,通过这种分离,开发人员可以更加方便地修改UI或数据和业务规则,同时又不会相互影响;
(P336) 我们的目标不是将开发领域统一为一种全功能的设计,我们的目标是建立应用程序,使它足够安全、可测试和灵活以适应功能的伸缩和增长;
(P340) MVP模式的核心在于模型,或者更准确地讲,在于代码的逻辑部分,这些部分处理业务规则和逻辑;
(P341)
在大多数情况下,表示器是作为对视图进行的一种可测试抽象;
ASP.NET页面的视图或UI部分是将信息提交到Web服务器或从Web服务器获取信息的主要入口点;
(P348) 表示器的目的是处理到视图的输入和来自视图的输出;
(P370) 表单是由动作和方法组成的;
(P371) Web MVC 将到达的请求与特定的输出进行了分离,将该请求路由至服务器端对象上的对应方法;
(P377) 系统中的每个概念实体通常都是由一个模型、一个控制器和n个视图组成;
(P380) Web MVC 的威力体现在它能够将正确的体系结构模式与快速应用程序开发相结合;
(P383) ASP.NET MVC 视图都有一个名为 Model 的引用,该引用是用作该页面所引用的模型对象的一个句柄;
(P394) 在领域驱动设计(Domain Driven Design)领域中,认识域模型对象的规则及其判断是否违背了这些规则通常都属于域模型对象本身的职责;
《精通.NET企业项目开发》 - 书摘精要的更多相关文章
- 【EatBook】-NO.2.EatBook.2.JavaArchitecture.1.001-《修炼Java开发技术在架构中体验设计模式和算法之美》-
1.0.0 Summary Tittle:[EatBook]-NO.2.EatBook.2.JavaArchitecture.1.001-<修炼Java开发技术在架构中体验设计模式和算法之美&g ...
- 《修炼Java开发技术 在架构中体验设计模式和算法之美》 - 书摘精要
(P7) 建议直接加入到软件公司中去,这样会学到很多实际的东西: 程序员最主要的发展方向是资深技术专家,无论是 Java..Net 还是数据库领域,都要首先成为专家,然后才可能继续发展为架构师: 增强 ...
- 测试开发技术:DOM中 innerHTML、innerText、outerHTML、outerText的区别
测试开发技术:DOM中 innerHTML.innerText.outerHTML.outerText的区别 我们在做web自动化的过程中通过dom处理web页面元素,那么你就要了解innerHT ...
- Java基础语法(8)-数组中的常见排序算法
title: Java基础语法(8)-数组中的常见排序算法 blog: CSDN data: Java学习路线及视频 1.基本概念 排序: 是计算机程序设计中的一项重要操作,其功能是指一个数据元素集合 ...
- Java开发技术大揭底——让你认知自己技术上的缺陷,成为架构师
一.分布式架构体系 分布式怎么来的.传统的电信.银行业,当业务量大了之后,普通服务器CPU/IO/网络到了100%,请求太慢怎么办?最直接的做法,升级硬件,反正也不缺钱,IBM小型机,大型机,采购了堆 ...
- 2020 年最流行的 Java 开发技术
不知不觉间,2020 年即将于十几天之后到来,作为技术圈中你,准备好迎接最新的变化了吗?在本文中,我们将以编程界最常用的编程语言 Java 为例,分享最为主流的技术与工具. 作者 | divyesh. ...
- 手机端UC浏览器,在java开发的下载功能中存在的问题?
在java web开发中,不同浏览器对下载文件的格式有不同的要求,有时会出现视频,音频等文件无法下载的问题.我在开发中,也遇到类似的问题,觉得很苦恼. 经过百度和请教学习,得到2个解决方案. 首先得到 ...
- 个人总结的一个中高级Java开发工程师或架构师需要掌握哪几点!
今天,我来唠叨几句~~ 知识改变命运,对于Java程序员来说,技术不断更新,只有及时充电,才能不被市场淘汰.今天为大家分享Java程序员学习的6个小技巧. 1.一定要看书 现在学习Java变得比以前容 ...
- Java开发技术
1.基础技术 数据结构与算法 逻辑结构:数据对象中的数据元素之间的逻辑关系 1.集合结构:集合结构中的数据元素除了同属一个集合外,没有其他关系. 2.线性结构:线性结构中的数据元素之间是一对一的关 ...
- 【饿了么】招聘Java开发工程师、架构师
3年以上实际工作经验,本科及以上学历. 具有良好的编程基础( 比如熟悉HTTP.多线程.Socket.JVM.基本的数据结构和算法等). 熟悉Java语言以及相关的服务器(比如Tomcat).工具(M ...
随机推荐
- 【WEB HTTP】集成点:网关、隧道及中继
网关:网关可以作为某种翻译器使用,它抽象出了一种能够到达资源的方法.网关是资源与应用程序之间的粘合剂. 在不同http版本之间进行转换的Web代理和网关一样,他们会执行复杂的逻辑,以便在各个端点之间进 ...
- 剑指offer 面试65题
题目65题:不用加减乘除做加法. 解法一:Python特性 # -*- coding:utf-8 -*- class Solution: def Add(self, num1, num2): # wr ...
- python之数据的序列化
参考博客:http://www.cnblogs.com/yyds/p/6563608.html 数据的序列化功能表 json.dumps() 将python数据类型转换为(json)字符串 json. ...
- Python基础(15)_python模块、包
一.模块 1.什么是模块:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀 模块的本质:模块的本质是一个py文件 2.模块分为三类:1)内置模块:2)第三方模块: ...
- C语言中auto,register,static,const,volatile的区别
1)auto 这个关键字用于声明变量的生存期为自动,即将不在任何类.结构.枚举.联合和函数中定义的变量视为全局变量,而在函数中定义的变量视为局部变量.这个关键字不怎么多写,因为所有的变量默认就是aut ...
- 【leetcode刷题笔记】Surrounded Regions
Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captured ...
- 以太网100Mhz频率为什么可以达到带宽1000Mbps
转: https://wenku.baidu.com/view/353ea8ecb0717fd5370cdc0b.html
- IEEE802.11数据帧在Linux上的抓取 80211格式转8023帧格式
转:http://blog.csdn.net/dog250/article/details/7749372 终于得到了梦寐的<802.11无线网络权威指南>,虽然是复印版本,看起来也一样舒 ...
- Python编程-继承和接口
一.继承 1.什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类. 继承的好处: 可以使用现有类的所有功能,并在无 ...
- cocos2dx打飞机项目笔记五:CCSpriteBatchNode 的使用
在上一节里,在头文件看到 定义了一个 CCSpriteBatchNode* batchNode;,在addEnemy方法里看到 batchNode->addChild(enemy); 新建的敌机 ...