我正在编写一个Web服务来从数据库表中检索发票信息。具体内容如下:
我打算将InvoiceAgentId
作为输入并检索PayerId
,PayerName
,EffDate
和InvoiceAgentId
。
现在,
1.在InvoiceInfoSearch.asmx.cs
文件中,我有WebMethod
... GetInvoiceInfo
2.我有DTO对象InvoiceInfoRequest
和InvoiceInfoResponse
3.我有BusinessLayer经理班InvoiceSearchmanager
4.我有DAL InvoiceInfoDAL
点#1中的Web方法实例化InvoiceSearchManager
类,并通过传递 GetInvoiceInfo
来调用管理器中的InvoiceInfoRequest
方法。然后,manager方法实例化 InvoiceInfoDAL
并通过传递 GetInvoiceInfo
InvoiceInfoRequest
方法>。在DAL方法中, InvoiceInfoResponse
被实例化并填充检索到的记录集,然后传播回Web方法。
我的问题:
1. <{strong> InvoiceInfoRequest
和InvoiceInfoResponse
DTO类可以拥有完全相同的成员吗?就我而言PayerId
,PayerName
,EffDate
和InvoiceAgentId
这个分层是否正确?可以更好吗?
答案 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#遵循类似的架构。