摘要:
问题:在面向对象系统的分析与设计过程中经常会遇到,对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的。这时候我们一般需要把逻辑(算法)框架放在抽象基类中,并定义好细节的接口,采用继承的方式在子类中实现细节。定义:模板方法模式是类的行为模,定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可以重定义算法的某些特定步骤。意图:Template是采用继承的方式实现算法的异构,将通用算法封装在抽象基类中,并将不同的算法细节放到子类中实现,使得子类可以置换掉父类的可变部分,但是子类却不可以改变模板.
阅读全文
posted @ 2012-07-10 17:54
ejiyuan
阅读(845)
推荐(0)
摘要:
问题:在软件系统中,有时面临着一个复杂对象的创建工作,通常是由很多其他的对象按一定的规则顺序组合而成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的规则是相对稳定(结构和顺序)。这时候我们需要把这个复杂对象的创建过程和这个对象的表示(展示)分离开来,使得可以使用同样的构建过程创建不同的对象 表示。定义:将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。意图:提供一个建造者Builder对象,他规定了创建一个复杂对象需要的部件,通过Director指定的创建规则,调用Builder中的具体部件,并指挥Builder返回一个具体的对象。.
阅读全文
posted @ 2012-07-09 11:47
ejiyuan
阅读(1656)
推荐(0)
摘要:
问题:在面向对象的设计中,抽象是一个很重要的概念,所谓抽象就是忽略一类对象的特殊特性,提出一些共有的特性,暂时忽略一些细节,而对与此类对象的变化可以使用继承的手段在子类中完成,换言之,用继承来应对抽象的变化。在软件系统中,当抽象由于某种原因也容易变动,使得对象从两个维度或更多方向上发生改变。使用继承方案往往违背了类的单一职责原则(即一个类只有一个变化的原因),复用性比较差。Bridge模式是比继承方案更好的解决方法。定义:桥接模式(Bridge Pattern),将抽象部分与它的实现部分分离,使的抽象和实现都可以独立地变化。意图:Bridge模式,系统被分为抽象(Abstraction)和实现
阅读全文
posted @ 2012-07-05 18:13
ejiyuan
阅读(895)
推荐(0)
摘要:
问题:在软件系统开发中经常需要为某些对象建立一些依赖关系,而这些依赖于该对象的依赖者会根据该对象的状态变化,触发某些事件或方法也做出相应的改变,我们怎么样建立这种依赖关系,并做到当对象状态发生变化时对依赖对象的通知?定义:观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。意图:提.
阅读全文
posted @ 2012-07-04 18:03
ejiyuan
阅读(4417)
推荐(0)
摘要:
问题:在软件系统开发中经常会遇到这样的情况,在一个系统中实现了一些接口(模块),而这些接口(模块)都分布在几个类或几个子系统模块中比如A和B、C、D,各自实现了一些功能接口。然后对于客户,并不知道或并不想知道,这些功能接口是怎么样实现的,是在哪里实现的。外观模式可以为一个复杂的系统(有很多分布在不同类或子系统中的方法)提供一个简单的供客户端调用的接口,使耦合大大降低定义:外观模式(Facade,也叫门面模式)是一种构造型设计模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。意图:提供一个接口,这个接口能够把其他可重用类(代码,子系统).
阅读全文
posted @ 2012-07-02 15:58
ejiyuan
阅读(2553)
推荐(0)
摘要:
问题:在面向对象的软件设计中,经常需要将一些现存的对象放在新的环境中或与新的对象一起工作,但是他的接口与新环境要求的接口不同,而双方又都无法改变。定义:适配器模式 也称包装样式或者包装,将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。意图:定义一个Adapter角色,将一个已存在的Adaptee类,通过继承或包装的手段,让他与现有的类实现同一接口的办法,转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。参与者:•目标(Target)角色:这是客户所期待的接口。目标可以是具体的或抽象的.
阅读全文
posted @ 2012-06-29 17:49
ejiyuan
阅读(1650)
推荐(0)
摘要:
问题:在面向对象的软件设计中,经常会遇到一个(或一系列)对象,对象本身的数据存储与对象的操作耦合在一起。例如一个对象有add(),edit(),delete()方法,这样对象支持的方法很难扩展,如果需要加入update()就必须修改代码,客户端与对象也是紧耦合的。命令模式是将一类对象的功能(行为,功能)抽象成一个命令对象,客户端在使用的时候,只与该命令对象打交道,而不用与对象打交道,分离命令的请求者和命令的执行者,降低了耦合性,可以使用不同的请求对客户进行参数化提高了程序设计的灵活性。定义:命令模式(Command)模式,将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请.
阅读全文
posted @ 2012-06-28 17:02
ejiyuan
阅读(3551)
推荐(3)
摘要:
问题:在面向对象的软件设计中,经常会遇到一些聚集对象,按一定的顺序的遍历访问问题,这个遍历算法究竟应该由谁来实现呢,聚集对象本身?这样聚集对象承受了过多的功能,不仅要维护聚集对象内的元素,还要提供遍历自身的接口,而且由于遍历状态保存的问题,不能对同一个容器对象同时进行多个遍历,这不符合单一职责原则。如果将遍历算法交给客户端,会将容器的内部细节暴露无遗,而且客户端与聚集对象高度耦合。分离了集合对象的遍历行为,将遍历算法交给这个迭代器角色来完成,可以很好的避免容器内部细节的暴露,而且也使得设计符合“单一职责原则”,另外迭代器模式抽象了具体迭代器角色,可以通过对一个抽象迭代器多个集成可来完成同一聚.
阅读全文
posted @ 2012-06-27 18:28
ejiyuan
阅读(1501)
推荐(1)
摘要:
问题:当我们定义一系列的算法,怎么能使得算法为应对不同的业务需要能自由的动态替换而又不影响到客户端的使用,并且算法的增减、修改都不会影响环境和客户端。定义:策略模式定义了一系列算法,把它们一个个封装起来,并且使它们可相互替换。该模式可使得算法能独立于使用它的客户而变化。意图:Strategy模式是行为模式,正因为他是一种行为模式,所以他不是用来解决类的实例化的,跟创建什么样的产品没有关系,此模式解决的问题是把一个系列完成相同工作,却实现不同的算法(行为)包装到一系列的策略类里面,使得它们可以相互替换,提供一个访问接口,由客户端决定在什么情况下使用什么具体策略,来完成某一功能。并可以自由的添加.
阅读全文
posted @ 2012-06-26 18:13
ejiyuan
阅读(1756)
推荐(0)
摘要:
问题:在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,并提只有一个全局访问点,才能确保它们的逻辑正确性、以及良好的效率。定义:单例模式也叫也叫单件模式是一种对象创建模式, 保证一个类仅有一个实例,并提供一个该实例全局的访问点。这个类称为单例类。意图:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。单例模式有三个要点:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例.参与者: •单例类:确保类只有一个实例,而且自行实例化并向整个系统提供这个实例。UML图:实例说明:诺基亚手机工厂诺基亚手机工厂,可以生产多款手.
阅读全文
posted @ 2012-06-25 15:45
ejiyuan
阅读(818)
推荐(1)
摘要:
问题:Factory Method模式是为一类对象提供创建接口或延迟对象的创建到子类中实现。但是,我们在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作,同时由于需求的变化,这“一系列相互依赖的对象”也要改变,如何应对这种变化呢?Abstract Factory模式是为创建一系列相关或依赖的对象提供创建接口(AbstractFactory),将一组产品的创建封装到一个用于创建对象的类(ConcreteFactory)中(形成一个系列),维护这样一个创建类总比使用Factory Method维护n多相关对象的创建过程(逻辑)要简单的多,而且Factory Method,没有办法保证“一.
阅读全文
posted @ 2012-06-21 18:21
ejiyuan
阅读(1901)
推荐(4)
摘要:
问题:简单工厂模式比较适用于事先已经考虑到的可能出现的算法,来构造工厂类实现,如果需要添加新的类,则就需要改变工厂类了,违反开闭原则,简单的说,简单公共适应与业务变化不是很剧烈的场景下如,审批业务,设计时可以判断到的只有“部门经理审批”,“总裁审批”不会过几天又要加入“组长审批”,去修改工厂类,相对来说变化不是很剧烈的。在软件设计中经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口。如果我们使用简单工厂,这样会不断地修改工厂类,应对业务变化,违反开闭原则,另外因为实例化产品的判断逻辑在工厂类中,工厂类会变的越来与臃肿。定义:工.
阅读全文
posted @ 2012-06-20 17:08
ejiyuan
阅读(4542)
推荐(1)
摘要:
问题:为了满足一种业务需要需要多个算法,(如:审批业务,有部门经理审批,总监审批,总裁审批...)。因为是同一类业务处理,所以我们经常会抽象出这些算法的公共属性和方法以形成抽象基类或者接口,这样我们可以通过声明一个指向基类(或接口)的指针来指向实际的子类实现,达到了多态的目的。因为要为每一种算法在使用之前都要先创建一个实例,然后才能使用。这里就出现的一个问题n多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就编写诸如new ×××;的代码 。这个实例化工作有谁来做呢,如果交给客户端去做,客户端势必要进行相应的逻辑判断,来决定调用那一算法去实例化相应的子类对
阅读全文
posted @ 2012-06-19 17:39
ejiyuan
阅读(1269)
推荐(0)
摘要:
EF正在成为一个优秀的ORM框架,4.1中就加入了Code First,当时带来的不少的惊喜,可是,4.1时,的Code First虽然可以不再依赖edmx,可是建立很多的,映射code,虽然这些code有工具可以自动生成,可是仍觉得解决方案混乱。今天感受了一下4.3,他可以不在依赖edmx,不再需要大量的映射code,写简单的,连接字符串,实现一个清爽的,基于POCO的ORM架构。4.3中好多东西都已被内部封装了我们只需简单的调用就好:1,定义数据操作对象///<summary>///定义一个DbContext///</summary>publicclassBookC
阅读全文
posted @ 2012-02-29 17:01
ejiyuan
阅读(5960)
推荐(4)
摘要:
所谓单点登录(Single Sign On就是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。其实对于程序员在技术上要实现就得就是多个不同域名间共享cookie的问题。 最近在为ERP添加一个部署在另一台机器上,链接到原有老系统中的子项目,调用原有老项目中的Login实现单点登录,尝试了N次屡试不成,最后确定问题,是,.net2.0与4.0中对cookie的加密/解密方法由此差异,于是经过研究,重写实现了一个可以在不同.net版本中实现单点登录的简单方法。1,共用登陆页代码实现:protectedvoidbtnLogin_Click(objectsender,Event.
阅读全文
posted @ 2011-09-28 11:54
ejiyuan
阅读(7499)
推荐(3)
摘要:
在大型系统中应用中,一个架构设计较好的应用系统,其总体功能肯定是由很多个功能模块所组成的,而每一个功能模块所需要的数据对应到数据库中就是一个或多个表。而在架构设计中,各个功能模块相互之间的交互点越统一、越少,系统的耦合度就越低,系统各个模块的维护性及扩展性也就越好。在一个系统中特别是较为大型的系统中,如电子商务系统,可也按照功能,切分为,订单管理系统、商品管理系统、用户管理系统、供应商管理系统.....
阅读全文
posted @ 2010-11-18 10:02
ejiyuan
阅读(9389)
推荐(12)
摘要:
随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天百万级甚至上亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。一、负载均衡技术负载均衡集群是由一组相互独立的计算机系统构成,通过常规网络或专用网络进行连接,由路由器衔接在一起,各节点相互协作、共同负载、均衡压力,对客户端来说,整个群集可以视为一台具有超高性能的独立服...
阅读全文
posted @ 2010-10-29 10:39
ejiyuan
阅读(17593)
推荐(40)
摘要:
一、需求分析 需求分析是对用户的业务活动进行分析,确定系统的目的、范围、定义和功能,明确在用户的业务环境中软件系统应该"做什么"。只有在确定了客户需求后,知道要“做什么”,才能够分析和寻求系统的解决方法,开展后续的工作,所以需求分析是软件工程中的一个关键过程。 这一步骤 要产生用户需求说明书,这个说明书既是给用户看的也是给开发人员看的,可以让用户更加确定自己的需求,让开发人...
阅读全文
posted @ 2010-06-03 13:10
ejiyuan
阅读(3020)
推荐(6)
摘要:
外键支持(Foreign Keys)Entity Framework添加了对外键的支持。利用外键关联,您现在可以将外键属性包含在实体里,这样做可以简化诸如数据绑定、n-tier开发等关键方案的开发。您可以直接使用外键属性设置实体之间的关系:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeH...
阅读全文
posted @ 2010-06-01 16:59
ejiyuan
阅读(5112)
推荐(0)
摘要:
WCF支持多种认证技术,例如Windowns认证、X509证书、Issued Tokens、用户名密码认证等,在跨Windows域分布的系统中,用户名密码认证是比较常用的,要实现用户名密码认证,就必须需要X509证书,用来加密用户名和密码。1. 创建数字证书 makecert -sr localmachine -ss My -n CN=ejiyuan -sky exchange -pe -r。2...
阅读全文
posted @ 2010-05-31 18:02
ejiyuan
阅读(17548)
推荐(9)
摘要:
X.509 数字证书是在 Internet 环境下,最方便的认证方式1. 创建数字证书 X509证书可以通过 证书颁发机构(如 VeriSign Inc)购买或通过MakeCert.exe 工具创建开发期间使用的临时证书 .制作一个证书。制作证书:makecert -sr localmachine -ss My -n CN=ejiyuan -sky exchange -pe -r。 参考:htt...
阅读全文
posted @ 2010-05-31 16:54
ejiyuan
阅读(7212)
推荐(3)
摘要:
WCF中每个标准绑定都提供用于控制传输安全性要求的参数。这些参数通常包括指定是使用消息级安全性还是使用传输级安全性的安全模式,还包括客户端凭据类型的选项。基于这些参数提供的可供选择的选项,构建一个具有适当安全性的信道堆栈。Transfer Security 主要包括三个方面: "消息完整性(Message Integrity)"、"消息机密性 (Message Confidentiality)" ...
阅读全文
posted @ 2010-05-31 14:59
ejiyuan
阅读(7727)
推荐(5)
摘要:
听说MSDN放出了Microsoft Visual Studio 2010 简体中文旗舰版,怀着激动的心情下载安装。下面是下载地址如果有MSDN订阅账号的话可以去https://msdn.microsoft.com/zh-cn/subscriptions/securedownloads/default.aspx如果没有可以使用下面的地址下载,这里感谢前人的分享ed2k://|file|cn_vis...
阅读全文
posted @ 2010-05-29 08:48
ejiyuan
阅读(29225)
推荐(7)
摘要:
一、面向对象技术基本概念 面向对象技术基于对象概念,以对象为中心,以类和继承为构造机制,充分利用接口和多态提供灵活性,来认识、理解、刻划客观世界和设计、构建相应的软件系统.面向对象的特征– 抽象,先不考虑细节– 封装,隐藏内部实现– 继承,复用现有代码– 多态,改写对象行为二、面向对象的设计目标1、可扩展性Extensibility–容易添加新的功能2、灵活性Flexibility–容易添加新的功能代码修改平稳地发生3、可插入性Pluggability–容易将一个类抽出去,同时将另一个有同样接口的类加入进来三、面向对象设计基本的设计原则: 1、针对接口编程,而不是针对实现编程– 客户无需知道所
阅读全文
posted @ 2010-05-28 11:55
ejiyuan
阅读(3507)
推荐(6)
摘要:
InstanceContextMode表示的是,WCF允许产生可用来处理包含在传入消息中的调用的服务(契约类)的实例InstanceContext模式数,WCF的并发模式ConcurrencyMode是针对某个封装了服务实例的InstanceContext而言的简单的说,InstanceContextMode表示产生多少个服务实例对象,ConcurrencyMode表示每个服务实例对象的并发控制模式InstanceContextMode:调用的服务(契约类)的实例模式有三种Single 单例模式:每个WCF服务创建一个InstanceContextMode对象,服务开始时创建,服务完成时销毁P
阅读全文
posted @ 2010-05-28 11:39
ejiyuan
阅读(4483)
推荐(5)
摘要:
定义:设计模式(可复用面向对象软件的基础)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。解释:是描述在各种不同情况下,要怎么解决问题的一种方案。面向对象设计模式通常以类型或对象来描述其中的关系和相互作用。目的:面对接口编程、降低耦合、增强灵活性。设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设计面对并适应变化的能力。设计模式的鼻祖(四个作者, 简称"四人帮")列举了23个常用的设计模式。1.创建型模式(Creational Pattern)就是用来创建对象的模式,创建型模式抽象了实例化过程。它们帮助一个系统独立
阅读全文
posted @ 2010-05-19 15:28
ejiyuan
阅读(832)
推荐(0)
摘要:
1,在项目中添加CodeFirstStoreFunctions包: 2,注册注册函数,FunctionsConvention第二个参数为函数定义所在的类 3,定义函数对应的方法,要入数据中函数签名一致 4,创建数据库函数 5,调用
阅读全文
posted @ 2010-04-26 09:38
ejiyuan
阅读(858)
推荐(0)
摘要:
因为最初错误的理解了Contract与Service的关系,把每个业务定义了相应的Contract与Service并将对应的Service一一继承相应的Contract,因为在WCF每个host只能提供一个Service所以导致,当你的服务很多的时候你要定义N多个host看下面演示提供User(用户)和Order(订单)两个服务:开启多个host代码:[代码]开启多个host配置代码代码 Code...
阅读全文
posted @ 2010-04-23 15:52
ejiyuan
阅读(3755)
推荐(2)
摘要:
IoC控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则用来解决系统耦合问题。 控制反转还有一个名字叫做依赖注入(DI:Dependency Injection)。IoC中最基本的技术就是interface + reflection,“反射(Refl
阅读全文
posted @ 2010-04-20 14:59
ejiyuan
阅读(458)
推荐(0)
摘要:
定义:Unity Application Block (Unity)是一个轻量级、可扩展的依赖注入容器,所谓依赖注入容器,即组件之间的依赖关系由容器在运行期决定,容器动态的将某种依赖关系注入到组件之中,实现构建高度松耦合的软件的工具,依赖注入容器处理相互关联组件的所有细节,因此你可以构建一个独立的组件,提升组件重用的概率,为系统搭建一个灵活、可扩展的平台。功能:它有助于构建松耦合的应用程序和为开发者提供以下便利: 1,它提供了创建(或者装配)对象实例的机制,简化对象的创建,特别在分层对象结构和依赖的情形下2,它支持需求的抽象化,这允许开发人员在运行时或在配置文件中指定依赖,简化横切关注点(cr
阅读全文
posted @ 2010-04-09 14:22
ejiyuan
阅读(2545)
推荐(0)