to ZHANG9652(剑神独孤求败)
我觉得你这么说不对,软件产业发展到今天,我们更应该讲究方法,软件工程的思想。我觉得flyfish51f (flyfish51f) 的思路是很好的。现在的计算机硬件发展要比软件快,尤其是在做商务应用的程序,我觉得效率不是主要问题。主要的是要有一个健全的建模思想。
在我的工程里面,我把所有的通用操作都封装在一个类里面了,不同的商务接口都是采用继承的关系从一个自定义的基类产生的。

解决方案 »

  1.   

    我认为三层是
    1.数据库层
    2.中间处理层
    3.UI层
    你看看Uml rose中的Use case就会明白
      

  2.   

    中间层的Category(目录类) News(新闻类)主要是这些类的属性定义和方法定义啦,比如标题,内容,日期,作者,关键字等等,这些是属性,然后新增,修改,删除,查询列表等等是一般类都要写的方法,这些定义好了以后,就可以在表现层(WEBUI)用了
      

  3.   

    以前因为三层结构,能提高程序运行速度,看了wrox公司出的<<asp.net高级站点编程>>,才知道不是,全书程序是用三层结构实现的,有时觉得很烦琐,我认为写成一个公共类,能更好维护,而且开发速度绝对比他们慢,数据层,业务层,表示层,觉得没有必要这么细分,
      

  4.   

    我认为分层还是极其必要的,尤其是多人开发的时候,并且在维护的时候比以前的模式要省事很多。
    建议楼主看一下PetShop的例子。个人意见,虽然它不是很复杂的三层,但是该模式对中小型开发基本够用了,如果业务再复杂,就继续分层。可以参照Duwamish 的例子,在c:\Program Files\Microsoft Visual Studio .NET\Enterprise Samples下(视安装目录而定),目前大多数使用存储过程的做法都是数据库存取层和数据访问层,业务层。层分到最后应该就是业务层的再分层了,如果业务复杂,分28层都是合理的(kaka)。与数据库越近的层将来改动的就越小,甚至拿到别的项目中立刻就可以用,很象以前写的公共函数。
    个人意见。
      

  5.   

    三层结构的提出本来就是一场编程思想的革命,其先进性是毋庸置疑的,为此争论毫无意义。
    ZHANG9652(剑神独孤求败)说没见过几家公司用三层结构? 别总在思过崖那个暗无天日的洞里呆着了,该下山走走了,外面的世界很精彩:-)
      

  6.   

    也许是吧,南昌的公司都是小作坊式的,想找个正规的好地方真是难,郁闷呀,另外,我说的不是三层结构没公司用,是说oo思想,现在大家做东西不还是面向过程的吗,有几个人真正运用了oo思想呢
      

  7.   

    我比较赞成 ZHANG9652(剑神独孤求败)Duwamish只是个例子,只是微软用来演示.net能做什么的工具,其实照它这种复杂度的软件根本用不着划分那么多层,无论怎么考虑扩展性~~~~~还是应该具体情况具体分析,比如这个新闻系统,如果你没有什么特别复杂的逻辑,以后也不会有,就不需要搞什么商务层
      

  8.   

    怎么能又倒退到DNA呢?DOTNET本来就是要取代它的。
    中间层整个就是OO思想的体现,如果你们觉得写三层结构更麻烦的话,这从某种程度上说明你们的中间设计,或说OO思想的贯彻有问题;但OO确实是要有度的,比如继承,就最好不要超过三层以上,否则很容易发生“脆弱的基类”问题。
      

  9.   

    我个人认为三层开发的核心是对逻辑层或者说商务层的封装。最近用php开发了一个简单的定单查询系统,发觉有点不对劲---源文件怎样保护?看了一堆书,想想或许错在了对表示层和逻辑层的混淆,asp\php\jsp本身只应该是粘和剂,核心的操作应该由com或ejb封装。
    数据层与商务层的区别在于数据层只负责具体对数据库的操作,而商务层考虑更多的应该是怎样操作数据实现相应的功能。
    不知道各位大侠是如何开发、理解这三层的?
      

  10.   

    我正好在做新闻系统,研究了一下,把我设计的拿出来给大家看看:一:数据库
    包括两个表1.tNewsSubject 新闻分类表,有如下几个字段:
    fSubjectID   新闻类别编号   主健    VChar
    fSubjectName 新闻类别名 VChar
    fDesc        类别描述   VChar
    fSubImg      新闻类别图片URL VChar 
    2. tNews 表,新闻内容
    fNewsID 新闻编号 主健 VChar
    fSubjectID  新闻所属类别编号  VChar
    fTopic  新闻标题 VChar
    fBody   新闻的Html格式的正文
    fExpireDate 新闻到期时间  DataTime 二:数据层名称空间:Sanxing(公司名).Web.News.Data
     包含如下类1. Subject类
     作用是管理新闻类别的所有方法
    方法如下:
    Public Sub New(NewConnection) 构造函数,参数是连接字符串
    Public Function GetSubjectName() As DataSet 返回所有类名称
    Public Function GetSubjectDetails(SubID As String)As DataRow
    根据类别ID返回类的所有信息
    Public AddSubject(Name As String,....)As Integer
    添加新的类别方法,返回此新类别的ID,如果已经有同名ID和同名类别名,返回-1
    Public UpdateSub(Name As Sting,....)As Boolean
    根据输入的内容更新指定的类别,成功返回True2. News类
    此类和Subject类同样,不过操作的是tNews表三:商务层
    名称空间:Sanxing.Web.News.Business1. Subject类
    此类是对新闻分类的操作
    Public ReadOnly Property SubjectID As String 
    返回新闻类别ID的只读属性
    Public Property SubjectName As String
    获取/设置新闻类别名属性
    Public Property SubjectDesc As String
    获取/设置新闻的描述属性
    Public Property SubImage As String
    获取/设置此新闻类别的图片URL属性Public Sub New ()
    没有参数的构造函数,初始化所有属性
    Public Sub New (subjectID As String)
    构造函数,类别编号作为参数
    Public Sub New (subjecttName As String)
    构造函数,类别名作为参数
    Private Sub ResetProperty()
    重新设置属性
    Private Sub LoadID()
    由构造函数调用,重新设置类别时用
    Public Function Create(ID As String,Name As String,...)As Boolean
    建立新类别方法,设置以后把所有的属性设置为新类别的属性。
    Public Function Update() As Boolean
    根据用户设置的属性的值来更新当前类,成功返回True
    Public Function Delete()As Boolean 
    删除当前类,成功返回True
    Public Shared Function GetAllSubject() As DataSet
    返回所有新闻类别的方法,此方法一般给管理员用
    Public Function GetGews() As DataSet
    返回所有当前类别编号下的所有新闻条目
    Public Function GetNews(before As DateTime)As DataSet
    重载方法,返回没有过期的新闻
    Public Function GetNews(after As DateTiem)As DataSet
    重载方法,返回过期的新闻(管理员用)
    Public AddNews(......)As News
    添加此类别下新闻方法,返回我们后面定义的新闻类类型值。2. News类
    作用和Subject类一样,对新闻表的操作,
    具体类成员定义我就不写了。
    累死了~~
    贴主给点分~~
    ^_^
      

  11.   

    他奶奶的,我计算了一下,发现如果这样设计的话,一个解决方案下得有十来个项目:
    Sanxing.Web
    Sanxing.Web.Data '数据库的基类
    Sanxing.Web.News.Data
    Sanxing.Web.News.BusinessSanxing.Web.Navigator '网站导航
    Sanxing.Web.SiteGlobal '网站公共类,包括错误处理,搜索等
    Sanxing.Web.Admin  管理类,给管理员用的
    Sanxing.Web.User   用户管理类这还是最基础的,如果要文章显示,做一个,邮件发送,做一个,
    论坛,做一个。老天~~~
      

  12.   

    我这几天在研究,三层结构是不是比我只写一个类更有优势, TomMax(笑望人生)说得对,一个项目设计下来,光命名空间都搞得头晕
      

  13.   

    三层机构的优势在分布式应用程序上体现的比较好!特别是对于web service来讲,分层的结构就更为重要了!
      

  14.   

    to:TomMax(笑望人生) 
    我采用的三层结构跟你差不多!
    只主是在商务层和数据层上很难区分
    我感觉商务层的类,大部分都在数据层完成了,
    有时觉得真烦锁,两个合用一个逻辑层,开发起来更高效,至于系统的扩展嘛有得必有失,只要看项目的大小!不过有一点可以肯定的事,用模块(module)开发,确实有利于以后重复使用!
    asp.net确实是一个经典的mvc设计模式!
      

  15.   

    我认为在.net里商业逻辑,规则同属一层就是商务层!
    三层结构应该是
    数据层 :有限数据集
    商务层 :商业逻辑,规则
    表示层 :用户看见的各进行交互的过程
      

  16.   

    我的理解是:
    数据层包含了对数据库的操作,比如说调用视图,存储过程或者直接硬编码
    SQL命令,全部是放在数据层里面的。
    商务层虽然有一些建立,删除,更新的方法,但是没有任何操作数据库的代码。这样写有个好处,如果开发两个网站,可以把商务层的代码直接拿来用,只要把数据层改写就可以了。另外分层结构可以多人开发。
      

  17.   

    我觉得如果你用过一些方法generator的话,你就知道这样的设计有什么好处.....