我的网络服务的“分层”是否正确?可以改进吗?

时间:2010-07-14 05:14:21

标签: c# web-services dto

我正在编写一个Web服务来从数据库表中检索发票信息。具体内容如下:
我打算将InvoiceAgentId作为输入并检索PayerIdPayerNameEffDateInvoiceAgentId
现在,
1.在InvoiceInfoSearch.asmx.cs文件中,我有WebMethod ... GetInvoiceInfo
2.我有DTO对象InvoiceInfoRequestInvoiceInfoResponse
3.我有BusinessLayer经理班InvoiceSearchmanager
4.我有DAL InvoiceInfoDAL

点#1中的Web方法实例化InvoiceSearchManager类,并通过传递 GetInvoiceInfo 来调用管理器中的InvoiceInfoRequest方法。然后,manager方法实例化 InvoiceInfoDAL 并通过传递 GetInvoiceInfo InvoiceInfoRequest 方法>。在DAL方法中, InvoiceInfoResponse 被实例化并填充检索到的记录集,然后传播回Web方法。

我的问题:
1. <{strong> InvoiceInfoRequestInvoiceInfoResponse DTO类可以拥有完全相同的成员吗?就我而言PayerIdPayerNameEffDateInvoiceAgentId 这个分层是否正确?可以更好吗?

2 个答案:

答案 0 :(得分:2)

从分层角度来看,您的描述看起来不错。您可以在DAL和Business图层中使用相同的方法名称。问题在于紧耦合。在您描述它时,您的Web层将实例化实例化DAL层的业务层。

如果是这种情况,您打算如何单独对业务层进行单元测试?

我建议你为DAL和业务层引入一个抽象级别(通过让它们实现接口)。然后业务层实现可以将DAL接口作为构造函数参数(构造函数注入),而不是让它实例化DAL。

这种抽象级别允许您通过模拟对象替换单元测试中的真实DAL,并单独测试业务层。

所有管道(实例化)都将在Web层完成。

答案 1 :(得分:0)

这都是品味问题,但我的方法会更简单:

Controller (eg your *.asmx.cs) -> 
  Business Services ->
    DAL

由你决定。然而,我的架构是由java世界中的spring和hibernate所起作用的(例如,不是与谷物摩擦)。我假设C#遵循类似的架构。