Architecture 在ntier应用程序中传递数据

Architecture 在ntier应用程序中传递数据,architecture,domain-driven-design,n-tier-architecture,layered,Architecture,Domain Driven Design,N Tier Architecture,Layered,如何将数据传递到n层应用程序中的层?我制定了3种不同的方法 A) 通用.net对象通用数据表、哈希表、通用数据集、字符串、整数等。。。 然后使用数据集填充发送到UI层的业务对象 Pro-不需要额外的图层 Con-必须在业务层中使用通用数据集和表 B) 使用其他层将引用的实体层。该层将包含强类型数据集或普通的旧C对象。对象主要是容器数据,很少有逻辑。这些将是发送到UI层的相同对象 Pro-在所有层中使用相同的类 Con-将对entities.dll的引用添加到所有层 C) 使用DataAc

如何将数据传递到n层应用程序中的层?我制定了3种不同的方法

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

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

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

Pro-在所有层中使用相同的类 Con-将对entities.dll的引用添加到所有层

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

Pro-业务层不必使用泛型类 如果使用两种类型的对象,则必须将业务对象与传输对象结合起来

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

谢谢

我喜欢选项C,但它也让我暂停,原因有两个:

  • 我必须在太多的地方传播知识产权
  • DTO必须是可序列化的,这并不可怕,但仍然需要考虑

  • 我假设所有3层都存在于同一个应用程序中。至少在java中,我使用了Hibernate进行数据访问,并在所有层中使用了这些数据bean。(选项B)能够在层中重用实体是有意义的。

    这是一个很好的问题-一如既往,答案必须是“视情况而定”

    取决于应用程序的类型,以及是否真的需要业务对象(实体),而不是传输对象(即简化与数据库实体相对应的业务对象)

    传统上,我认为您总是需要通用数据集(或数据表),纯粹是出于性能原因。每当需要使用、显示或操作较大的集合时,实例化大量业务对象的传统严格OO方法就会失败

    然而,自从我开始使用LINQtoSQL以来,我的范例已经改变了。不再需要这样做了,因为Linq模型可以是任何东西——业务对象、传输对象和通用数据集。我还没有探讨这在真正的大型应用程序中的效果如何,以及是否需要将前端代码与Linq模型隔离开来。我已经与同事讨论过了,但没有找到任何答案。

    如果使用分层方法,意味着所有层(基本上)都在同一进程空间中执行,因此没有编组/序列化,我将使用方法B。为您的实体创建一个单独的模块,您的程序的所有方面都依赖它,并与之耦合


    但是,如果您使用的是标题所建议的分层方法,这意味着存在跨越流程和/或网络边界的情况,我建议您使用方法C。您并不是在传递实例,而是在传递副本,因此,耦合到同一对象的任何好处,比如MVC方法的可观察选项,反正我们都迷路了。最好在每一层定义数据API,而不是在所有层都使用同一个类

    我想+1你只是为了链接到dabbleboard。我从来不知道这件事。谢谢现在。。。你又出什么问题了?玩水板上也是。这很酷。是的,dabbleboard非常适合与远程团队成员一起工作。这是一种分层方法,所有层都在同一进程空间中执行。在这种情况下,标题应该是什么?下面是我在n层应用程序中传递数据的猜测?非常感谢。层和层之间的区别往往是模糊的,但主流观点是层跨越某种物理边界,通常是需要编组或序列化的物理边界。层倾向于指逻辑分离,通常不跨越该边界。查看更多信息的链接。