2010-12-17 140 views
2

VS2K8,C#。我目前有以下项目的解决方案:体系结构问题:服务

核心 - POCO域对象和数据接口

数据 - Repository模式。实现Core中定义的接口。还有Fluent NHibernate的映射类。

基础设施 - 用于依赖注入,配置NHibernate的,等

测试 - 测试[测试为核心,数据等]

网 - MVC2 web项目

现在,与据说,我试图确定添加诸如以下内容的最佳行为:加入邮件列表,提交联系信息等。

我不相信这些应该在网络中。我不认为他们需要被放置在数据中,除了保存邮件列表信息和联系信息fwiw时。

听起来这应该放在核心层面。据说,如果放在Core中,它将依赖于保存到数据库。我有点困惑于何处以及如何设计它。什么路线你们采取什么?

这是一件简单的事情,只需在名为MailingList的Core级别上创建一个名为JoinMailingList(emailAddress)的接口,然后在Data上实现该接口?这听起来不像是最佳路线,因为这是一个商业问题。思考?

+1

建筑问题属于程序员.stackexchange.com http://blog.stackoverflow.com/2010/12/introducing-programmers-stackexchange-com/ ....让混乱开始!我们从不需要第一个地方的其他网站。 – Shoban 2010-12-17 18:43:34

+0

让我们试着在这里解决它。毕竟它是一个编程相关的问题。 – Pradeep 2010-12-17 18:47:02

+1

我认为这是放置在stackoverflow.com上是安全的。这是一个编程相关的问题,我们将在这里看到代码。它肯定有一些更高层次的架构问题,但没有什么奇怪的。 – StephenPAdams 2010-12-17 18:58:49

回答

3

添加服务库并将服务接口包含在核心库中。

public interface IMailingListService 
{ 
    void Subscribe(string email); 
    void Unsubscribe(string email); 
} 

public interface IMailingListRepository 
{ 
    MailingList LoadMailingList(); 
    void SaveMailingList(MailingList list); 
} 

public class MailingListService: IMailingListService 
{ 
    private IMailingListRepository _repository; 

    public MailingList(IMailingListRepository repository) 
    { 
    _repository = repository; 
    } 

    public void Subscribe(string email) 
    { 
    var list = _repository.LoadMailingList(); 
    list.Subscribe(email); 
    _repository.SaveMailingList(list); 
    } 
} 
+0

感谢您的快速回复。你要走这条路:1.使用邮件列表服务(IMailingListService)界面创建Services项目/库。 2.在Core中创建邮件列表存储库接口。 3.在Core中实现邮件列表服务。 4.在Data中实现邮件列表存储库(通过NHibernate,我们的例子)。是? – StephenPAdams 2010-12-17 18:53:45

+0

还指出,它应该引用你的核心库,但不是你的数据库。您应该在您的网站上连接DI容器,它应该引用数据库和服务库,以便容器可以为您处理依赖关系。 – NerdFury 2010-12-17 18:55:31

+0

关闭,服务实现在服务库中。接口(IMailingListService)与您的存储库合同一起进入核心。我倾向于在我的Core库DataContracts和ServiceContracts中为各个接口创建两个文件夹。 – NerdFury 2010-12-17 19:06:27