日期:2014-05-20  浏览次数:20797 次

关于抽象工厂、三层架构的项目始终理解不到位,请大牛们点拨一下???
前几天在csdn上下项目,是csdn上哪位朋友分享的,先感谢一下。

项目是关于抽象工厂和三层架构的,于是我也下载来研究一下,开始看了老半天,感觉我的理解总是“不踏实”,好像缺少点什么,望大牛可以点拨一下,来个茅塞顿开。。

项目结构原图:


我把主要关于抽象工厂和三层架构的几个模块拿出来画了一下:


先说一下我的理解——各个层的用途(倒过来讲——从底层说起)
AccessDAL——数据访问层(主要用于操作Access数据库)
SQLServerDAL——数据访问层(主要用于操作SQL Server数据库)
FactoryDAL——通过配置文件,决定使用哪个数据访问层。
BLL——业务逻辑层,主要通过FactoryDAL等到确切的数据访问层对象(是AccessDAL中的对象还是SQLServerDAL中的对象)
UI——页面展示(不多说)

我总觉得我还有一下地方没有考虑到,例如第二张图片中的红色框框部分。主要是各层之间对IDAL关系不够理解。。。
———————————————————————分割一下———————————————————————————


先贴一点点代码吧,实在不知道该贴哪儿的代码……

using System;
using System.Data;
using cofcms.IDAL;
using cofcms.FactoryDAL;

namespace cofcms.BLL
{
    /// <summary>
    /// 业务逻辑类Adbanner 的摘要说明。
    /// </summary>
    public class Adbanner
    { 
        protected static readonly IAdbanner dal = DataAccess.CreateAdbanner();
        public Adbanner()
        { }
        #region  成员方法
        /// <summary>
        /// 是否存在该记录
        /// </summary>
        public bool Exists(int Id)
        {
            return dal.Exists(Id);
        }
        
        //…………省略很多方法…………
        #endregion  成员方法
    }
}



上面的类中主要是protected static readonly IAdbanner dal = DataAccess.CreateAdbanner();这句代码不是很懂
DataAccess是FactoryDAL层中的一个类,CreateAdbanner的方法定义是:

public static IAdbanner CreateAdbanner()
{
    string classname = path + ".Adbanner";
    return (IAdbanner)System.Reflection.Assembly.Load(path).CreateInstance(classname);
}


写的东西比较多,麻烦大牛们耐心阅读一下!!!

谢谢!!!
------解决方案--------------------
你可以看看petshop的一些知识
------解决方案--------------------
记得不到一年换第二份工作时,被人问到 const 与 readonly 的区别

面试别人的时候,我有时会问面向接口编程

看似很基础的面试题,确能帮助你更好的设计。


------解决方案--------------------
引用:
引用:

你可以看看petshop的一些知识


大哥,petshop这个东东我早看过,可是里面的层分的也忒多了吧,再说里面的注释什么的都是E文的。。。

我还是觉得这个简单点!!


PETSHOP4好像没啥东西,就那么几个类库。。。多看看,现在很少关注这个了,关注DDD XP
------解决方案--------------------
你这个有四、五层吧?!

只要有BLL概念就是三层了,至于要不要包装去使用数据库驱动,那是三层以后的事,基本上我的原则是:以简单为原则。DAL部分最好不要搞形式主义,但是假设别人有一分钟就自动生成的包装,可以考虑使用,但永远不是唯一的,任何人都可以使用不同的方法来访问数据库驱动,不一定就只能使用你的DAL。
------解决方案--------------------
其实你看看你的图片上贴的所谓代码文件的分布方式就会发现,这类代码把几乎所有精力都给了操作数据库的那些语句了,也就是什么DAL之类的,开发搞到这个地步,是不是太过了啊?

开发要面向用户不断变化需求,而不是面向那些只喜欢研究DAL的程序员啊。如果你检视一套代码如果出现的业务逻辑分布、前台分布并不多,而全都是什么DAL之类的配套文件,我是认为这样的产品没有什么可参与开发的必要。
------解决方案--------------------
我是想告诉你,你把那两个问题搞明白 就知道为什么要那么写那行代码了。
------解决方案--------------------
汗   我做的东西你咋下载了?  

我被拍砖了    
不过sp大哥说的有道理       我虚心接受,当时做这个只是出于无聊,并不是说做什么
现在在做用户操作性强的东西  已经摈弃这个模式了   上次谁说要源码学习  我就给贴了一下地址
想不到今天一打开觉得好面熟   
 菜鸟飘过   好好学习    天天向上 

------解决方案--------------------
引用:
引用:

汗   我做的东西你咋下载了?

我被拍砖了
不过sp大哥说的有道理       我虚心接受,当时做这个只是出于无聊,并不是说做什么
现在在做用户操作性强的东西  已经摈弃这个模式了   上次谁说要源码学习  我就给贴了一下地址
想不到今天一打开觉得好面熟
菜鸟飘过   好好学习    天天向上


嘿嘿,谢谢你啊!!!……


我不是亚亚么?!!!!
呵呵    252456098   
------解决方案--------------------
大牛出現了。。
學習一下。。
------解决方案--------------------
1.抽象工厂实际和3层没有直接性的逻辑关系。只能说一些3层设计使用了抽象工厂做手段。
2.lz下的这个例子实际就是petshop的架子,但实际开发中这套架子并不多见,他主要集中在一些新手的项目,和一些大公司的项目中。

新手用是因为这套架子是微软地,但是属于不明就里的照搬

大公司用是因为,他们开发项目有明确的设计周期。那些IDAL,factroy有很长的调研分析阶段。

而petshop用这套东西,一个是微软为了展示他的技术,二是petshop是一个经历了十多年的虚拟demo,他的需求,设计,功能早在10年前就固定下来了,微软所能展示的也就是只能是dal和dalfactory了,至于啥IBIL,IDAL这10多年基本就没变过。

而一般中间层的很少使用这套模型。因为国内的项目很少给你那么长时间做调研分析,也很少给你一个固定不变的需求,在时间不够的情况匆忙上马的IBIL,IDal典型是不合适地,而不断变化的需求也让你去不断更新IBIl,IDal,这很明显也并没有体现啥好处
------解决方案--------------------
我顶一下
------解决方案--------------------