首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

分享三层(多层)开发中的经验,该如何解决

2012-04-03 
分享三层(多层)开发中的经验1.实体类尽量用组合而不是继承,更不要用一个字段表示外键关系,因为这样在数据

分享三层(多层)开发中的经验
1.实体类尽量用组合而不是继承,更不要用一个字段表示外键关系,因为这样在数据显示的时候会带来麻烦
2.无论是dal层还是bll层还是其他层都应该用异常处理机制而不是用错误处理,比如返回int,或者一个对象,这样都不好
  因为这样除了增加文档外还要程序员每次去if (返回值==XX)
3.每层都用接口编程,对外只是暴露接口,
4.如果是自己写dal层的话,不要用sql拼接的方式
5.最好不要用存储过程,特别情况例外,因为存储过程影响调试和维护
6.不要指望你的程序员既要熟悉数据库又要熟悉程序,发挥他的优势就好,(主管或者项目经理是追求完美主义的除外)
7.每层命名规范要到位。
8.没有经过需求调研不要编码为好,因为就开始编码了基本上是白做的,因为都是你个人想法而已(但是我却做了,最后等死)
9.不要XX人说这个不好看或者性能不好就改,因为他可能不是决策人,即使是也要写在文档里,待下个版本或其他进度完成的时候分配来做
(我现在就这样,所以经常磕磕碰碰,最后大家都累死)

其他的留给大家发挥了。。。

[解决办法]
sf
[解决办法]
接分.


三层客户/服务器 

一:优点:灵活性和可扩展性。 

应用三层开发技术(分布式)的原因 

(参考书目: Delphi 5.x分布式多层应用系统篇) 

一:解决客户机/服务器结构的维护成本问题,改善客户机/服务器结构延展性问题。 

客户机/服务器结构支持的用户人数有一定限度(200人以下)。则种结构限制了Internet/Intranet及电子商务的发展。三层开发应用Database Pooling, Object pooling,Resource Pooling,线程模式提供了高度延展性。 

二:解决应用逻辑重复使用的问题。 

例如:当企业要在原有的客户机/服务器结构上添加Web浏览服务时,就需要配置Web服务器,重新编写所有应用逻辑,并且更新MIS系统。在三层结构中,用COM/DCOM, CORBA(Common Object Request Broker Architecture)对象,或Enterprise Java Bean等,封装企业的逻辑程序代码(称之为企业对象),可以解决上述问题。大大降低开发和维护的成本。 

三:整合不同系统结构的需要,及时应用新技术的需要。 

二:Microsoft的三层服务模型 

1:结构:是windows DNA(distributed internet applications,分布式内部网)COM(component object model ,构件对象模型)构件作为实现系统及应用程序服务的工具。 

l 用户服务 

l 业务服务 

l 数据服务 

(1)用户服务:windows DNA定义了四种可用于实现用户服务层的客户: 

n 标准浏览客户:依赖于简单,基于页面的HTML来管理数据表示和与用户进行交互.其兼容性 很好,功能不丰富。 

n 增强型浏览器客户:汲取某个特殊浏览器(ex: Dynamic HTML ,脚本及ActiveX控件)的优点来最大化用户接口的丰富性和功能 ,适用于公司intranet . 

n 依赖型Internet客户:能在客户机器上将对Internet的访问和对操作系统的访问集成在一块。 

n 增强型Internet客户:Microsoft Office 97和Microsoft Visual Studio. 



(2)业务服务:通过将基于服务器的Microsoft产品与定制的COM构件运行环境集成在一块来实现。 

n Web服务( Microfsoft Internet Information Server与Active Server Pages ). 

n 事务和构件服务 (Microsoft Transaction server和 COM) . 

n 消息服务(Microsoft消息队列服务器)。 

n 通用数据访问(universal data access)(Microsoft数据访问过件) 

l 大型机环境的互操作(Microsoft SNA服务器). 其详细信息在下面的专题中列出。 



(3)数据服务: 


n Microsoft SQL Server7数据库。 

n Microsoft Exchange server 5.5版本的目录和信息库。 





专题: 

业务服务 

一:Web服务( Microsoft Internet Information Server与Active Server Pages ). 

Web服务对象模型: 

1,server对象:提供对服务器上方法和属性的访问.例:问(universal data access)(Microsoft数据访问构件) setobjmyobject=server.createobject(“businessserver.myruleobject”) 

2:Session对象: 用来存储一个特定用户会话所必须的信息。 

3:Application对象:用来使某个应用程序的所有用户共享息。 

4:Request对象:略。 

5:Response对象:略. 



二:事务和构件服务 (Microsoft Transaction server和 COM)

1:Microsoft事务服务器(MTS)是基于构件的事务处理系统,用来满足复杂事务处理。MTS支 持SQL Server和任 

何基于X/open算法的XA协议的数据库(见注释)。 

MTS提供的服务有: 

n 对分布事务的支持。 

n 用于控制实例化和使用对象安全的服务。 

n 过程和线程的自动管理。 

n 对象实例的管理。 

n 数据库连接管理(连接池)。 

在应用程序中可声明相应的构件完成以上服务。

2:MTS和SQL server事务一样,要求原子执行,或整个成功,整个失败。Transaction Server与Microsoft Distributed Transaction Coordinator(MSDTC)交互确认事务满足ACID(原子性Atomicity,一致性Consistency,分离性Isolatation和耐久性Durability)。 

3:MTS和SQL server事务的区别.MTS可以用visual basic ,visual c++ 等封装的MTS构件实现 , Recordset对 

象的addnew方法添加新行。SQL server事务只能由Transact-SQL代码编写,如 (ADO). 

4:Windows DNA(windows distributed internet application architecture):将客户/服务模式开发与web和在一起的战略 . 



使用HTML,DHTML,Active server pages向用户提供第一层(表达层), MTS和MTS的构件, 如IIS(internet information server),IIS/ASP构件及ASP脚本占据中间层(业务逻辑层),SQL server作为数据服务层。 

5:MTS使用分布事务协调者(Distributed Transaction Coordinator , DTC)事务引擎.DTC使用两级段交付标准。 

关于DTC的信息可通过一下方法得到:用MMC(Microsoft Management Console)打开c:\winnt\system32\services.msc, 

在右边的列表中找到DTC服务,察看其属性。 

6:使用MTS最大化系统性能。(注意事项) 

n 避免传递或返回对象。 

n 尽可能通过值(BY VAL)来传递参数。(By Val关键字使网络间的旅程最小) 

n 避免创建数据库游标。少用RecordSet对象。 

n 通过使对象包容器线程化(Apartment Threaded),MTS可以在多个对象中执行并发的客户请求。 

7: 

注释:XA是一种由X/Open组织定义的两相提交协议,允许多个数据库服务期间的事务协同,并将其看作一个事务。(Unix数据库,包括oracle ,informix,db2都支持) 

三:消息服务(Microsoft消息队列服务器)。 

1:Microsoft消息队列(Microsoft Message Queue ,MSMQ)为应用程序提供了异步通信功能.MSMQ被认为是连接分布式应用程序中业务与数据服务层的桥梁。 

2:MSMQ自动与MTS集成。应用程序可以将MSMQ消息封装在MTS事务中。 

3:MSMQ与Microsoft exchange服务器的不同.exchange提供用户到用户(person -to -person)的消息传送.而MSMQ提供应用程序到应用程序(application - to -application)的消息传送. 

四:通用数据访问(universal data access)(Microsoft数据访问构件)

数据访问构件跨越了业务服务层和数据服务层之间的界限。ADO,OLE DB(嵌入式数据库)以及ODBC共同组成了Microsoft数据访问构件(MDAC). 

五:大型机环境的互操作(Microsoft SNA服务器) 



三层开发基本概念介绍<二>::
  
Microsoft的COM &DCOM(简介)一:COM是一种定义对象服务器如何与对象客户进行交互的协议。对象服务器(object server)是实现COM类的模块。对象客户(object consumer)是使用COM对象的模块。 

DCOM扩展了COM协议,使得对象服务器可以位于一台与客户不同的计算机。 通过RPC向对象服务器调用。(CORBA也是分布对象协议) 

COM通过SSPI(Security Support Provider Interface,安全支持提供者接口)来管理对象的安全性。 

二:应用服务器(中间层)应具备的特性: 

n 远层启动,监视和中止的能力。 

n 可扩展的能力。 

n 易于配置的能力。 

n 安全失效的能力。 

远层启动功能:如果用户想在远程计算机上创建一个COM对象,远程机上的DCOM服务控制管理器(Service Control Manager ,SCM)会自动启动COM服务器并使COM对象可用。具体信息可在开始菜单中运行DCOMCNFG命令。

易于配置的能力:在Windows资源管理器中右击一个COM DLL或EXE就可激活注册或撤销注册。 

可扩展的能力:可扩展的第一等级和第二等级。DCOM提供的两种负载均衡。1),静态负载均衡(指定应用服务器的运行机器),可在DCOMCNFG中的应用程序的属性中指定。2):动态负载均衡,由调度程序进行分配。 

Delphi提供的相关技术: 

u COM / DCOM / COM+企业对象。 

u CORBA企业对象。 

u XML / HTML 

u CGI / SAPI/NSAPI 

u ASP 

u Active X (Active Form) 

u ADO / OLE DB 

u BDE / IDAPI SQL Links 

u MTS对象 

u MIDAS服务器 

u CORBA服务器。 

相关组件在1) File菜单\new\ Multitier和ActiveX页中。 

2)在组件面板中的ADO, Midas, Internet Express, ActiveX等页中。 

Corba简介1:什么是corba(common object request broker architecture)? 

Corba是由object manangement group(OMG)定义的分布式对象标准结构。语言中立,使用了面向对象的设计结构,允许软件对象在不同的操作系统平台和应用程序中重复使用。 

如果想实现一下功能,corba是较好的解决方案: 

l 应用系统要整合异质平台和操作系统。 

l 应用程序服务器必须执行在linux/unix机器中。 

l 应用系统必须执行关键性任务,具备安全强固的容错能力,必须稳定,有效率。 

l 想开发使用Web对象的Internet/Intranet解决方案。 

l 应用系统未来想和Java整合。 

2:corba的结构 
corba对象是一个提供特定服务的组件,它通过定义一组输出接口来声明可以提供的服务。在这个输出接口中,corba对象定义了客户端可以调用的方法和存取属性。客户端只要指明提供服务的corba对象的名称以及要调用的方法或是要 

存取的属性就可以通过ORB得到corba对象提供服务。 

术语介绍: 

ORB: object request broker.联结客户端和中介的corb对象。 

Stub对象: 运行在客户端的corba对象的复制品,在客户端调用的是Stub对象,然后Stub对象通过ORB远程调用 

CORBA对象,Stub对象用Marshaling(对象指针转换,使对方程序能够识别)自动为你传递参数和数据。 

Skeleton对象:运行在服务器端的对象,将传递到服务器的数据还原成服务器端使用格式。然后根据自动根据客户端要求调用CORBA对象。 

调用方式: 

u 静态调用:客户端程序通过Stub对象将数据传递到corba对象,corba对象执行完毕后,通过Skeleton对象 

把结果再Marshaling回客户端的Stub对象,经由Stub对象回复数据格式后,再回传给客户端的应用程序。 

 动态调用(Dynamic Interface Invocation DII):客户端不需要先有stub对象,也不需要知道远程corba对象提供的方法和属性,corba程序可以在执行时取得这些信息,然后动态的调用corba对象。 

DII比静态调用有更大的弹性,但编程较难,且执行效率不如静态调用。 



3:corba提供的核心服务 

n Event Service: 以“提供者—消费者(Supplier_consumer)“模型通过一个事件信道然提供者对象以异步的方式传递事件给消费者对象


n Naming Service: 允许程序员使用阶层式的方式为企业对象命名,然后在程序中可以使用这些有意义的名称来存取这些对象。 

n Transaction Service:提供分布式应用系统能够执行关键任务,允许企业对象在异质平台和数据库之间进行数据的Two-Phase Commit的交易管理。 

n Security Service :包括存取控制(Access control),稽查控制(Auding),认证控制(Authentication),存取政策控制(Plicy Control). 



MIDAS介绍 
一:MIDAS概念 

MIDAS (Multi-tier Distributed Application Services Suite (多层分布式应用程序服务器)) 是开发多层应用系统使用的中介透明引擎。通过MIDAS,程序员可以通过相同的组件存取不同的后端应用程序服务器(如,COM/DCOM应用程序服务器,CORBA应用程序服务器,MTS中介软件),MIDAS也提供容错能力,负载平衡以及高执行效率的能力。 

中介者和功能: 

u 远程数据中介者(Remote Data Broker):提供客户端存取远程数据的能力。 

u Constraint中介者:允许客户端应用程序下载远程数据库对数据设定的constraint。让数据在客户端被数据库的constraint检查。减少网络流量。 

u 企业对象中介者(Business Object Broker):允许应用系统开发执行企业逻辑的企业对象。 

u 容错能力:当一个客户端联结的应用程序服务器发生错误时,企业对象中介者就会在网络中寻找另一个提供相同功能的应用程序服务器,将客户端联结到该应用程序服务器上,客户并不知道发生的一切。这时必须使用无状态对象。 

u 负载平衡:当客户端多于服务器数目时,企业对象中介者自动平衡服务器的连接数目。 

二:数据处理 

 应用程序服务器从数据库取出客户端想要的数据,进行数据封包(data packet),通过Iappserver接口以OleVariant的形式传递给客户端,到达后,通过客户端的MIDASServer整理,加入到ClientDataSet的数据快储内存中,这时,客户端于应用程序服务器的连接断开。 

 在客户端应用了TclientDataSet的ApplyUpdates方法要求更新时,MIDASServer把更新之前的数据封装在数据封包中,然后再封装被更新的数据(只含被改变的),当应用程序服务器收到这些Delta数据封包之后,Resolver先将其解析, 

然后对于每一笔更新的数据,Resolver首先根据第一笔封装的原始数据到数据库中寻找纪录,如果纪录已经被其他用户改变了,MIDAS会把原来客户端传来的数据和数据库中最新的这笔数据一块传回客户端,要求用户决定如何处理。 

 如果数据更新失败,则MIDAS会把发生问题的数据封装在数据封包之中传回客户端

[解决办法]
高耦合低类聚
需求分析做好
类实例化,通过接口编程
[解决办法]
1.实体类尽量用组合而不是继承,更不要用一个字段表示外键关系,因为这样在数据显示的时候会带来麻烦 
至于是桥接,还是继承,还是装饰,这个要看实际的情况.你那边的开发模式,大家都不清楚,这样的话,未免让不知道的人,看起来觉得特别的勉强.

2.无论是dal层还是bll层还是其他层都应该用异常处理机制而不是用错误处理,比如返回int,或者一个对象,这样都不好 
try catch 一堆不好吧?
没有符合要求的int,返回-1或者其他临界值难道不行吗? int型整体来说比string安全很多.从安全上考虑,就算多写了if,难道不值得吗?

3.每层都用接口编程,对外只是暴露接口, 
为了接口而接口,完全就是误用.
为了模式而模式,完全就是自己娱乐自己.

5.最好不要用存储过程,特别情况例外,因为存储过程影响调试和维护 
我写的东西,程序里都没有sql.全是procedure,我怎么没有觉得难以维护和调试啊.
相反,我到觉得维护性很好.数据层里的修改,代码都不用动,改改存储过程就行,还不用编译code.
[解决办法]
学习,
[解决办法]
学习中。
[解决办法]
谢谢LZ,学习了,
[解决办法]
jf
学习...
[解决办法]

[解决办法]

探讨
高耦合低类聚
需求分析做好
类实例化,通过接口编程

[解决办法]

学习、接分
[解决办法]
学习
[解决办法]
学习咯
[解决办法]
5.最好不要用存储过程,特别情况例外,因为存储过程影响调试和维护

这个不对吧

我认为sql语句更不好维护

select id,name from user 
如果改成 select id,name,age from user
你得改程序

写存储过程缺不用
[解决办法]
ding

热点排行