这个好像、也许、或许、大概、应该、Maybe真的可以算是传说中的简单工厂了吧
2014-08-02 04:15
309 查看
这个好像、也许、或许、大概、应该、Maybe真的可以算是传说中的简单工厂了吧
接上文(这个好像、也许、或许、大概、应该、Maybe真的可以算是传说中的面向接口编程了吧)。
上文有说到,我在BLL层是已经可以new出不同的实例,这样就可以做到数据库驱动层的一个切换了。因为其是用接口的实例,而后面是用一个具体实现。这样果断是可以做到数据库访问驱动层的一个切换的,非常简单的只需要我们在BLL层改动一点代码,new 出不同的实例出来就可以了。只是如果是这样的话,那么,我们要做到切换数据库访问驱动层的话,就得在BLL层改代码了。正如上文提到,如果有很多地方都要用到此实例的话,我们就都得到每个BLL或者说是服务的地方去new,多且不说,万一哪个地方一不小心new错了也是不好的。所以,我们能不能做到不动BLL层就可以做到切换数据访问驱动层的呢。
上文中在文章结尾也有说过园子里可能会有一篇叫“这个好像、也许、或许、大概、应该、Maybe真的可以算是传说中的简单工厂了吧”的文章。也有园友提出这样写不是很好,应该用简单工厂(笔者在此处对园友表示感谢)。那么,我就写了这篇名字叫做“ 这个好像、也许、或许、大概、应该、Maybe真的可以算是传说中的简单工厂了吧”的文章吧。我们开始再用简单工厂优化一下吧。
个人认为其本质也就是写一个静态类。里面返回一个实例可以了。返回实例要一个抽象的,在写方法的时候。下面return的时候就要返回一个具体的了。
我们新建一个类库项目。在其中,我们写一个静态方法,用此静态方法得到实例。而在BLL层调用一个这个方法,也就可以了。其代码如下。
逻辑层的代码(注意区别)
[align=left] 看一下新加的简单工厂的图:[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] 逻辑层中的图:[/align]
[align=left] 那么,我们这么写的好处,就很好的做到了职责单一原则。我简单工厂的职责就是我只负责创建我的实例。而逻辑层根本就不需要关心我的实例是如何来的。并且这样我们如果要重新发布网站的话。项目也不用重新生成,只需要把这个简单工厂的程序集重新生成,把这个简单工厂的程序集复制到我们部署的网站的bin目录的文件下,网站一重启,整个网站的代码是不需要重新编译的。如若要切换,只需要改“简单工厂”里的代码就可以了。[/align]
[align=left] [/align]
[align=left] 攻城狮又说了,这样做的话确实是又进步了一些。从最开始的为了切换一个数据库的驱动层,几乎将整个项目的每个层的很多地方都要做改动到只需要到逻辑层里那个new实例的地方(new出一个不同的实例来就可以做到切换数据库驱动层了)。然后因着如果切换一个数据库访问驱动层还得到BLL层那个创建实例的地方去修改且还会有不同的服务要此实例,改动地方依旧很多还可能出点错。我们就想到不在BLL里创建实例,而到其他的地方创建实例。于是就用到了简单工厂,也就是用静态方法创建实例。就可以不用在BLL层修改代码了,只需要在简单工厂里修改其创建的实例,在BLL层调用其创建实例的方法就可以了。那么可不可以通过配置就切换这个数据访问驱动层呢。那样,不就更好么,只改下APP.CONFIG就切换数据库访问驱动层。[/align]
[align=left] 李宁说过一句话,他说,一切皆有可能。所以,是的,也许以后园子并不会多一篇叫做“这个好像、也许、或许、大概、应该、Maybe真的可以算是传说中的抽象工厂了吧”的文章。[/align]
[align=left] 笔者依旧写的是很简单的东西。欢迎拍砖指正,共同进步。[/align]
接上文(这个好像、也许、或许、大概、应该、Maybe真的可以算是传说中的面向接口编程了吧)。
上文有说到,我在BLL层是已经可以new出不同的实例,这样就可以做到数据库驱动层的一个切换了。因为其是用接口的实例,而后面是用一个具体实现。这样果断是可以做到数据库访问驱动层的一个切换的,非常简单的只需要我们在BLL层改动一点代码,new 出不同的实例出来就可以了。只是如果是这样的话,那么,我们要做到切换数据库访问驱动层的话,就得在BLL层改代码了。正如上文提到,如果有很多地方都要用到此实例的话,我们就都得到每个BLL或者说是服务的地方去new,多且不说,万一哪个地方一不小心new错了也是不好的。所以,我们能不能做到不动BLL层就可以做到切换数据访问驱动层的呢。
上文中在文章结尾也有说过园子里可能会有一篇叫“这个好像、也许、或许、大概、应该、Maybe真的可以算是传说中的简单工厂了吧”的文章。也有园友提出这样写不是很好,应该用简单工厂(笔者在此处对园友表示感谢)。那么,我就写了这篇名字叫做“ 这个好像、也许、或许、大概、应该、Maybe真的可以算是传说中的简单工厂了吧”的文章吧。我们开始再用简单工厂优化一下吧。
个人认为其本质也就是写一个静态类。里面返回一个实例可以了。返回实例要一个抽象的,在写方法的时候。下面return的时候就要返回一个具体的了。
我们新建一个类库项目。在其中,我们写一个静态方法,用此静态方法得到实例。而在BLL层调用一个这个方法,也就可以了。其代码如下。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Anmutu.OA.AdoNetDAL; using Anmutu.OA.DAL;//添加EF层的程序集。 using Anmutu.OA.Model; namespace Anmutu.OA.BLL { public class UserService { #region 用到简单工厂后的代码 private IDAL. IUserDal userDal = DalFactory.DalSimpleFactory.GetUserDal(); public User AddUser( User user) { return userDal.AddUser(user); } #endregion #region 实现接口后的代码 // IDAL.IUserDal userDal = new UserAdoNetDal();//当要用到ADO.NET作为访问驱动时。 // IDAL.IUserDal userDal = new UserDal();//当要用到EF作为访问驱动时。 //public User AddUser(User user) //{ // return userDal.AddUser(user); //} #endregion #region 用EF作为访问驱动层时的代码。 //private DAL.UserEFDal _userEfDal = new UserEFDal(); //public User AddUser(User user) //{ // return _userEfDal.AddUser(user); //} #endregion #region 用ADO.NET作为访问驱动层时的代码 //private AdoNetDAL.UserAdoNetDal userAdoNetDal = new UserAdoNetDal(); //public User Add(User user) //{ // return userAdoNetDal.AddUser(user); //} #endregion } }
逻辑层的代码(注意区别)
[align=left] 看一下新加的简单工厂的图:[/align]
[align=left] [/align]
[align=left] [/align]
[align=left] 逻辑层中的图:[/align]
[align=left] 那么,我们这么写的好处,就很好的做到了职责单一原则。我简单工厂的职责就是我只负责创建我的实例。而逻辑层根本就不需要关心我的实例是如何来的。并且这样我们如果要重新发布网站的话。项目也不用重新生成,只需要把这个简单工厂的程序集重新生成,把这个简单工厂的程序集复制到我们部署的网站的bin目录的文件下,网站一重启,整个网站的代码是不需要重新编译的。如若要切换,只需要改“简单工厂”里的代码就可以了。[/align]
[align=left] [/align]
[align=left] 攻城狮又说了,这样做的话确实是又进步了一些。从最开始的为了切换一个数据库的驱动层,几乎将整个项目的每个层的很多地方都要做改动到只需要到逻辑层里那个new实例的地方(new出一个不同的实例来就可以做到切换数据库驱动层了)。然后因着如果切换一个数据库访问驱动层还得到BLL层那个创建实例的地方去修改且还会有不同的服务要此实例,改动地方依旧很多还可能出点错。我们就想到不在BLL里创建实例,而到其他的地方创建实例。于是就用到了简单工厂,也就是用静态方法创建实例。就可以不用在BLL层修改代码了,只需要在简单工厂里修改其创建的实例,在BLL层调用其创建实例的方法就可以了。那么可不可以通过配置就切换这个数据访问驱动层呢。那样,不就更好么,只改下APP.CONFIG就切换数据库访问驱动层。[/align]
[align=left] 李宁说过一句话,他说,一切皆有可能。所以,是的,也许以后园子并不会多一篇叫做“这个好像、也许、或许、大概、应该、Maybe真的可以算是传说中的抽象工厂了吧”的文章。[/align]
[align=left] 笔者依旧写的是很简单的东西。欢迎拍砖指正,共同进步。[/align]
相关文章推荐
- 这个好像、也许、或许、大概、应该、Maybe真的可以算是传说中的Spring.Net了吧
- 这个好像、也许、或许、大概、应该、Maybe真的可以算是传说中的面向接口编程了吧。
- 【职场感悟】精确表达,不要说“大概应该maybe也许”
- Zine,这个移动端写作工具简单易用,或许能拯救碎片化思考
- 数据绑定应该算是Spring MVC的特点之一吧~简单易用且功能强大,极大地简化了我们编程人员对于用户输入数据的接收及转换。 早先版本的Spring中的数据绑定完全都是基于PropertyEditor
- 设置图片inSampleSize但是内存没变?或许你应该看看这个
- php采集程序,大概应该是这个思路
- 这个简单算法也许可以让人工智能真正像人一样思考
- 简单工厂、工厂、抽象工厂的区别
- 帮我看看这个程序吧,好像问题很多呀
- 休息之余简单说下我对“爱情”这个名词的看法
- [FxCop.设计规则]8. 也许参数类型应该是基类型
- 设计模式之-简单工厂、工厂方法、抽象工厂
- Socket,好像也挺简单,可是,真够烦
- [ASP.NET]制作一个简单的多页Tab功能 -Ajax也可以按照这个来做
- JAVA学习中应该注意的一些简单问题?
- 简单的总是好的,在这个复杂的世界: java simple log
- [FxCop.设计规则]8. 也许参数类型应该是基类型
- BBS 设计思路系列 ---- 论坛制度功能到底是应该是简单还是复杂??
- 在右键中加入DOS方式(也许这不是什么技巧,但是我却很受这个小东西的好处)