【发布时间】:2014-12-06 20:05:22
【问题描述】:
我正在创建一个应用程序,我正在使用外观设计模式,其中请求将通过 控制器 (webApi) -> Façade -> 业务 -> 存储库 我正在使用 Unity 配置来初始化我的对象(外观、业务和存储库),在控制器层我将设置 Unity 配置并初始化所有对象。但我的疑问是如何将存储库对象传递给业务层。 就像我在业务层中使用存储库方法调用一样,它肯定需要存储库对象,所以我在业务层构造函数中注入了它。见以下代码:
public class MessageBusiness : IMessageBusiness
{
IMessageRepository _messageRepository;
public MessageBusiness(IMessageRepository messageRepository)
{
_messageRepository = messageRepository;
}
public int AddMessage(RS.DomainEntity.Model.Message newMessage)
{
return _messageRepository.AddMessage(newMessage);
}
}
现在我应该从 Façade 层传递这个存储库对象吗?
public class MessageFacade : IMessageFacade
{
IMessageBusiness _messageBusiness;
public MessageFacade(IMessageBusiness messageBusiness)
{
_messageBusiness = messageBusiness;
}
public int AddMessage(RS.DomainEntity.Model.Message newMessage)
{
return _messageBusiness.AddMessage(newMessage);
}
}
如果没有,我可以在我的业务层中注入这个存储库吗?或者如果是,那么我们也需要在 Façade 中传递它,这就像将对象从一层传递到另一层。这是正确的行为吗? 另外,如果您给出第一个问题的答案,那么我如何在我的 Façade 层中执行集成测试。任何想法?任何帮助深表感谢。提前致谢。 问候, 维韦克
【问题讨论】:
-
控制器必须包含一个点,所有对象都将使用 Unity 容器进行配置。 Facade 只需要知道业务,它必须不知道业务的实现,因此您不需要通过业务层传递存储库。