to ZHANG9652(剑神独孤求败)
我觉得你这么说不对,软件产业发展到今天,我们更应该讲究方法,软件工程的思想。我觉得flyfish51f (flyfish51f) 的思路是很好的。现在的计算机硬件发展要比软件快,尤其是在做商务应用的程序,我觉得效率不是主要问题。主要的是要有一个健全的建模思想。
在我的工程里面,我把所有的通用操作都封装在一个类里面了,不同的商务接口都是采用继承的关系从一个自定义的基类产生的。
我觉得你这么说不对,软件产业发展到今天,我们更应该讲究方法,软件工程的思想。我觉得flyfish51f (flyfish51f) 的思路是很好的。现在的计算机硬件发展要比软件快,尤其是在做商务应用的程序,我觉得效率不是主要问题。主要的是要有一个健全的建模思想。
在我的工程里面,我把所有的通用操作都封装在一个类里面了,不同的商务接口都是采用继承的关系从一个自定义的基类产生的。
1.数据库层
2.中间处理层
3.UI层
你看看Uml rose中的Use case就会明白
建议楼主看一下PetShop的例子。个人意见,虽然它不是很复杂的三层,但是该模式对中小型开发基本够用了,如果业务再复杂,就继续分层。可以参照Duwamish 的例子,在c:\Program Files\Microsoft Visual Studio .NET\Enterprise Samples下(视安装目录而定),目前大多数使用存储过程的做法都是数据库存取层和数据访问层,业务层。层分到最后应该就是业务层的再分层了,如果业务复杂,分28层都是合理的(kaka)。与数据库越近的层将来改动的就越小,甚至拿到别的项目中立刻就可以用,很象以前写的公共函数。
个人意见。
ZHANG9652(剑神独孤求败)说没见过几家公司用三层结构? 别总在思过崖那个暗无天日的洞里呆着了,该下山走走了,外面的世界很精彩:-)
中间层整个就是OO思想的体现,如果你们觉得写三层结构更麻烦的话,这从某种程度上说明你们的中间设计,或说OO思想的贯彻有问题;但OO确实是要有度的,比如继承,就最好不要超过三层以上,否则很容易发生“脆弱的基类”问题。
数据层与商务层的区别在于数据层只负责具体对数据库的操作,而商务层考虑更多的应该是怎样操作数据实现相应的功能。
不知道各位大侠是如何开发、理解这三层的?
包括两个表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类一样,对新闻表的操作,
具体类成员定义我就不写了。
累死了~~
贴主给点分~~
^_^
Sanxing.Web
Sanxing.Web.Data '数据库的基类
Sanxing.Web.News.Data
Sanxing.Web.News.BusinessSanxing.Web.Navigator '网站导航
Sanxing.Web.SiteGlobal '网站公共类,包括错误处理,搜索等
Sanxing.Web.Admin 管理类,给管理员用的
Sanxing.Web.User 用户管理类这还是最基础的,如果要文章显示,做一个,邮件发送,做一个,
论坛,做一个。老天~~~
我采用的三层结构跟你差不多!
只主是在商务层和数据层上很难区分
我感觉商务层的类,大部分都在数据层完成了,
有时觉得真烦锁,两个合用一个逻辑层,开发起来更高效,至于系统的扩展嘛有得必有失,只要看项目的大小!不过有一点可以肯定的事,用模块(module)开发,确实有利于以后重复使用!
asp.net确实是一个经典的mvc设计模式!
三层结构应该是
数据层 :有限数据集
商务层 :商业逻辑,规则
表示层 :用户看见的各进行交互的过程
数据层包含了对数据库的操作,比如说调用视图,存储过程或者直接硬编码
SQL命令,全部是放在数据层里面的。
商务层虽然有一些建立,删除,更新的方法,但是没有任何操作数据库的代码。这样写有个好处,如果开发两个网站,可以把商务层的代码直接拿来用,只要把数据层改写就可以了。另外分层结构可以多人开发。