在ntier应用程序中传递数据

eiu*_*165 8 architecture domain-driven-design layered n-tier-architecture

如何将数据传递给n层应用程序中的图层?我已经绘制出3种不同的方法.

A) 通用.net对象通用数据表,Hashtables,通用数据集,字符串,整数等...然后使用数据集来填充发送到UI层的业务对象.

alt text http://img11.imageshack.us/img11/460/generic.png

http://dabbleboard.com/draw?b=eiu165&i=26&c=54eef6f1ac01f03c85919518f4a24e798e57e133

Pro-无需额外的图层 Con-必须使用业务层中的通用数据集和表

B) 使用其他层将引用的实体层.该图层将包含强类型数据集或普通旧C对象.对象主要是容器数据和非常少的逻辑.这些将是发送到UI层的相同对象.

alt text http://img8.imageshack.us/img8/6454/entities.png

http://dabbleboard.com/draw?b=eiu165&i=6&c=d0c2b346894a96b12bd3867f630e474a2af098fa

与在所有层中相同的类工作 CON-添加参考entities.dll到所有层

C) 使用DataAccess Layer中定义的数据传输对象(仅限于conatiner对象).然后使用这些对象来填充发送到UI层的业务对象.

alt text http://img43.imageshack.us/img43/1236/transferp.png

http://dabbleboard.com/draw?b=eiu165&i=27&c=f886efa3f9d5eb4b45ddb02361c79cdcdaec0a9b

业务层不会有泛型类的工作 CON组有两种类型的对象的工作,你就必须水合物的传输对象的业务对象

我们在工作中进行了讨论,并希望了解社区的想法.我还添加了一个指向dabbleboard的链接.请复制和创建而不是编辑.
谢谢

Ran*_*pho 5

如果你正在使用分层方法,意味着所有层(基本上)都在同一个进程空间中执行,因此没有编组/序列化,我会采用方法B.为你的实体创建一个单独的模块,所有方面都是你的程序取决于,并与之相结合.

但是,如果你正在使用分层方法,正如你的标题所暗示的那样,意味着有跨越的过程和/或网络边界,我建议你采用方法C.你不是真的传递实例,你'重新传递副本,所以你在耦合到同一个对象时获得的任何好处,比如MVC方法的可观察选项,都会丢失.最好在每个层级定义数据API,而不是尝试使用相同的类.