存储过程和动态SQL的选择

摘要: 存储过程的优势:存储过程提供了对数据库的抽象层,这样如果数据库模式改变的话可以最小化的对应用程序代码的影响。使用存储过程也更容易实现和管理安全。因为可以限制访问除了存储过程之外的任何东西,并且可以利用大多数数据库支持的细粒度安全特性。动态SQL的优势:动态SQL比存储过程更灵活并且适合快速部署。许多对象/关系模型(O\RM)框架可以为我们生成动态查询,大幅减少开发人员要写的代码。 阅读全文
posted @ 2011-12-15 09:19 萧然 阅读(430) 评论(0) 推荐(0) 编辑

什么是软件架构

摘要: 软件架构的定义: 软件架构包含了一组关于如何组织软件系统的重要决策,这些决策包括: 1.如何选择构成系统的结构化元素和接口以及它们之间互相协作的行为。 2.如果采用一种架构风格用以指导整个组织过程。 3.同时考虑系统的功能性、易用性、弹性、性能、重要性、可理解性、经济性及技术约束 架构的目标: 架构的目标是找出影响应用程序结构的必要需求,好的架构可以减少构建技术解决方案带来的业务风险。 架构应该注意: 1.展示系统的结构但是隐藏实现的细节。 2.意识到所有用例和应用场景。 3.力求顾及参与者的需求。 4.处理功能和质量需求s 阅读全文
posted @ 2011-11-25 12:43 萧然 阅读(248) 评论(2) 推荐(0) 编辑

CLR via C#--命名空间和程序集

摘要: 命名空间的定义:对相关类型进行逻辑性分组,方便程序员使用命名空间来定位一个类型 。比如System.Text命名空间定义了一组执行字符串处理的类型。程序集的定义:程序集是一个或多个类型定义文件及资源文件的集合。命名空间和程序集的关系:1.同一个命名空间的各个类型可能是在不同的程序集中。2.在一个程序集中,也可能包含不同的命名空间。 阅读全文
posted @ 2011-06-15 15:11 萧然 阅读(214) 评论(0) 推荐(0) 编辑

CLR via c#--类型转换

摘要: CLR最重要的特性之一就是类型安全。CLR想要知道一个对象是什么类型,通过GetType方法可以得到,且该方法是非虚的。类型转化的原则:1.CLR 允许将一个对象转化为它的实际类型或者它的任何基类型。2.将一个对象转化为它的某个派生类时,C#要求只能进行显示转化。关于Is和as:Object obj=new Object();is的使用方法:If(obj is Employee){ Employee em=(Employee)obj;}is的两次对象类型的检查:1.is首先核查obj是否兼容于Employee类型。2.在执行Employee em=(Employee)obj;时,CLR会再次核 阅读全文
posted @ 2011-06-15 14:21 萧然 阅读(219) 评论(0) 推荐(0) 编辑

CLR via c#--类型基础

摘要: 一:所有的类型都从System.Object派生System.Object的公共方法:1.Equals如果两个对象具有相同的值,则返回true.但是如果比较的两个对象指向不同的引用,则返回false.实质上,它表示的是同一性,而非相等性。2.GetHashCode返回对象值的一个哈希码3.Tostring默认返回类型的完整名称(this.GetType.FullName)4.GetTypeSystem.Object受保护类型:1.MerberwiseClone这个非虚方法创建类型的一个新实例,并于新对象的实例字段设与this对象的实例完全一致。返回的是新对象的一个引用。2.Finalize在对 阅读全文
posted @ 2011-06-15 08:56 萧然 阅读(224) 评论(0) 推荐(1) 编辑

CLR via c#--共享程序集和强命名程序集

摘要: CLR支持两种程序集:弱命名程序集和强命名程序集两种程序集结构上完全相同,唯一的区别在于强命名程序集用发布者的公钥/私钥对进行了签名,它唯一性的标识了程序集的发布者。私有部署的程序集:是指部署到应用程序基目录或者子目录的程序集。弱命名程序集只能以私有的方式部署公有部署的程序集:是指部署到一些已知位置的程序集,因为CLR在查找程序集的时候,会检查这些已知的位置。一个强命名程序集的4个重要的attributes:1.一个文件名2.一个版本号3.一个语言文化标识4.一个公钥创建强命名程序集的工具SN.exe运行命令:SN -k MyCompany.snk全局程序集缓存(GAC):如果一个程序集要由多 阅读全文
posted @ 2011-06-14 08:37 萧然 阅读(553) 评论(0) 推荐(0) 编辑

CLR via c#读书笔记--垃圾回收

摘要: 访问一个资源的步骤:1.调用IL指令newobj,为资源分配内存2.初始化内存,设置资源的初始化状态。类型的实例构造器负责设置初始化状态。3.摧毁资源的状态进行清理4.释放内存托管堆:进程在初始化时,CLR要保留一块连续的地址空间,这块空间最初并没有对应的物理存储空间。这个地址空间就是托管堆。垃圾回收:第一步:标记阶段标记所有的根沿着线程栈,如果发现一个根引用了一个对象,就在这个对象的同步块索引字段上开启第一位。--对象就这样被标记了第二步:压缩阶段已标记的对象是认为是可以通过应用程序到达的对象,未标记的对象是不可到达的。不可到达的对象被认为是垃圾。垃圾回收只在第0代满的时候发生。非托管资源: 阅读全文
posted @ 2011-06-13 11:28 萧然 阅读(348) 评论(0) 推荐(0) 编辑

面向对象的设计原则

摘要: 1.单一职责原则:一个类应该有且仅有一个引起变化的因素2.开放封闭原则:对扩展开发,对修改封闭1)通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,使变化中的软件系统有一定的适应性和灵活性2)已有的软件模块,特别是最重要的抽象模块不能修改,这就使变化中的软件系统有一定的稳定性和延续性3)这样的系统同时满足了可复用性和可维护性3.替换原则:子类可以替换它的基类4.依赖倒置原则高层模块不应该依赖于底层模块,二者都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖与抽象5.接口隔离原则:一个类对于另一个类的依赖应该建立最小的接口上.不应该强迫客户依赖与它们不用的方法。接口属于客户,不属 阅读全文
posted @ 2011-06-13 11:25 萧然 阅读(322) 评论(0) 推荐(0) 编辑

企业架构模式笔记--第九章(领域逻辑模式)

摘要: 一:事务脚本使用过程来组织业务逻辑,每个过程处理来自表现层的单个请求。在客户系统和服务器系统之间的每次交互都包含一定的逻辑。在某些情况下,它可能如显示数据库中的信息一般的简单,也有可能设计计算,验证的步骤。事务脚本将所有的逻辑组成单个过程,在过程中直接调用数据库,或者只通过一个简单的数据库封装器。运行机制:事务脚本组织成类的两种方式:1.将数个事务脚本放在一个类中,每个类围绕一个主题将相关的事务脚本组织在一起。2.每个事务脚本对应一个类。这样就需要用Command模式。这种情况下应该定义一个所有命令的父类,在父类中声明事务脚本逻辑适合的方法。使用时机:适合用于只有少量逻辑的应用程序。(弄了半天 阅读全文
posted @ 2011-06-13 08:42 萧然 阅读(576) 评论(0) 推荐(0) 编辑

企业架构模式笔记--第四章(Web表现层)

摘要: web服务器的工作是:解释请求方的URL并调用服务器端应用程序来处理这些请求。构建Web服务器上应用程序的方法有两种:1.使用脚本适合于解释请求信息2.使用服务器页面适合格式化应答消息。这样的老观点也衍生出了模型-视图-控制器模式的用户界面中。控制器:处理请求消息模型:负责领域逻辑视图:基于模型创建应答消息过程:一条消息进入输入控制器,输入控制器从中获取消息。随后把业务逻辑传递给一个合适的业务模型。然后这个模型对象和数据源交互,并且按照请求消息的要求进行处理,应答并收集消息。做完这些后,它再把控制权交给输入控制器,输入控制器查看结果并且决定采用什么样的视图来显示应答消息。这通常是一个把数据放在 阅读全文
posted @ 2011-06-10 16:49 萧然 阅读(527) 评论(0) 推荐(0) 编辑