如何构建这个ASP.NET n层解决方案?

Pur*_*ome 5 architecture asp.net-mvc workflow-foundation n-tier-architecture visual-studio-2008

我有一个问题,试图布局我的VS解决方案,我想要一些建议,请.

目前,我的解决方案布局如下所示: -

Foo.Models
Foo.Repositories
Foo.Services
Foo.Web (an ASP.NET MVC application)
Run Code Online (Sandbox Code Playgroud)

我的website(Foo.Web)调用Foo.Services命名空间上的各种方法.这里的想法是Services处理所有业务逻辑.该Model命名空间只是POCO对象.Repositories命名空间是自我解释的.

带接口的构造函数依赖注入处理什么层需要什么组件的黑魔法.

问题:我希望在解决方案中添加一些Windows Workflow Foundation(WWF)代码,但将此WWF代码放在相同的Foo.Services.dll中.

为此,我需要创建另一个类型的项目Workflow.此工作流具有调用Foo.Services方法的活动.因此,我的网站现在必须调用服务方法或工作流方法来做事情.

我希望网站只调用Services命名空间来做东西.

毕竟,该服务是UI和业务逻辑IMO之间的主要接口.我在技术上使用WWF这一事实不应该成为IUI前端编码人员关注的问题.

因为工作流dll调用Services dll中的方法,所以由于循环依赖性,Services dll无法调用Workflow中的方法.

我也无法将所有工作流代码移到服务dll中,因为Services dll需要是一些特殊的项目类型(Windows Workflow类型).

那么..我不知道该怎么办?

我怎样才能使消费者只引用服务名称空间来处理业务内容,而且我在WWF中隐藏这些业务的事实对消费者来说是隐藏的?

我是否需要创建一个WWF项目并将我的所有服务代码移动到那里,扔掉旧的服务项目?这样做并非"听起来非常可重复使用".如果我决定不使用WWF处理某些pipline操作并使用其他内容会发生什么?

这里有一些代码可以帮助解释.

HomeController.cs
public ActionResult Index()
{
   // StockService was created using constructor dependency injection.
   var viewData = _stockService.GetStocks(StockType.MostPopular);
   return (viewData)
}

StockService.cs
public class StockService : IStockService
{
    public IEnumerable<Stock> GetStocks(StockType stockType)
    {
        // Dependency Injection defines if the Pipeline is WWF
        // or something else (eg. plain ole functions).
        var stocks = _stockPipeline.GetStocks(stockType);

        // Cache result.

        // Update repostiory. (example of calling the repository)
        _sqlRepostiory.SaveSomeRandomData("Jon Skeet Was Here.");

        return stocks. // Returns a POCO.
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢偷看.

Cra*_*ntz 1

您看过 Rob Connery 的 MVC Storefront/ Kona项目吗?他正在与 WF 做非常相似的事情,并且他的项目的布局也有些相似。这可能对您正在做的事情有很好的指导。我知道他确实与一些 Workflow Foundation 专家合作设计了他的集成。