我最近加入了一家公司,他们将类型化数据集用作他们的'Dto'。我认为它们很糟糕,并希望将其更改为更现代和用户友好的东西。因此,我正在尝试更新代码,使数据层更加通用,即使用接口等,另一个人不知道什么是Dto,我们在如何做这件事上有点分歧。
不想影响别人的思维方式,我想从你们这些人那里获得公正的答案,关于Dto可以出现在哪些层。所有层;DAL、BL和Presentation或者仅存在于这些层中的一小部分。
此外,IList对象是否应该存在于DAL中。
谢谢。
我最近加入了一家公司,他们将类型化数据集用作他们的'Dto'。我认为它们很糟糕,并希望将其更改为更现代和用户友好的东西。因此,我正在尝试更新代码,使数据层更加通用,即使用接口等,另一个人不知道什么是Dto,我们在如何做这件事上有点分歧。
不想影响别人的思维方式,我想从你们这些人那里获得公正的答案,关于Dto可以出现在哪些层。所有层;DAL、BL和Presentation或者仅存在于这些层中的一小部分。
此外,IList对象是否应该存在于DAL中。
谢谢。
这取决于您的架构。
大多数情况下,您应该尝试编写接口代码,然后实现并不重要。如果您返回ISomething,它可以是SomethingEntity或SomethingDTO,但只要它实现了接口,消费代码就不会在意。
您应该返回一个IList/ICollection/IEnumerable而不是具体的集合或数组。
首先应该尝试将代码分离,并通过在层之间插入一些接口(例如DataAccess层的存储库)使其松散耦合。然后,您的存储库将返回由接口封装的实体。这将使您的代码更易于测试,并允许您更轻松地进行模拟。一旦您有了测试,就可以开始更轻松地更改实现。
如果您开始使用接口,我建议尽早集成IoC(例如Windsor)。如果从一开始就这样做,以后的事情会更容易。
List<T>
,则应该返回 IList<T>
。有些人甚至只返回 IEnumerable<T>
,因为您只需要枚举的能力。但是在这样做时,不要成为宇航员架构师。IList<T>
而不是 List<T>
会污染我的代码库,像这样的代码://consider personCollection as IList<Person>
(personCollection as List<Person>).ForEach(//Do Something)
所以我个人尽量保持返回接口或具体对象之间的平衡。如果你问我现在在做什么,那么我会告诉你我正在返回List<T>
。我受到不成为太空人架构师的影响。
根据定义,DTO是数据传输对象,用于(等待它)在不同层之间传输数据。
DTO可以在所有层中使用,我已经成功地将它们与Web服务一起使用。