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

标签 asp.net-mvc visual-studio-2008 architecture workflow-foundation n-tier-architecture

我在尝试布局我的 VS 解决方案时遇到问题,我想要一些建议。

目前,我的解决方案布局类似于以下项目:-

Foo.Models
Foo.Repositories
Foo.Services
Foo.Web (an ASP.NET MVC application)

我的网站 ( Foo.Web ) 在 Foo.Services 上调用各种方法命名空间。这里的想法是 Services处理所有业务逻辑。 Model命名空间只是 POCO对象。 Repositories命名空间是不言自明的。

带有接口(interface)的构造函数依赖注入(inject)处理了什么层需要什么组件的黑魔法。

Problem: I wish to add some Windows Workflow Foundation (WWF) code into the solution, but put this WWF code in the same Foo.Services.dll.



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

我希望该网站只调用 Services命名空间来做事。

毕竟,服务是 UI 和业务逻辑 IMO 之间的主要接口(interface)。我在技术上使用 WWF 的事实对于在 IUI 前端编码的人来说不应该是一个问题。

由于工作流dll调用Services dll中的方法,因此Services dll由于循环依赖不能调用Workflow中的方法。

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

所以..我不知道该怎么办?

我怎样才能使消费者只引用商业内容的服务命名空间,而我在 WWF 中暗示这些商业内容的事实对消费者是隐藏的?

我是否需要创建一个 WWF 项目并将我的所有服务代码移入其中,扔掉旧的服务项目?这样做听起来不太可重用。如果我决定不使用 WWF 来处理某些管道操作并使用其他东西会怎样?

这里有一些代码可以帮助解释。
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.
    }
}

谢谢窥视。

最佳答案

你看过 Rob Connery 的 MVC 店面吗/Kona项目?他在做a very similar thing with WF ,他的项目是laid out in a somewhat similar way .可能是 good guidance因为你在做什么。我知道他在设计集成时确实与一些 Workflow Foundation 专家合作。

关于asp.net-mvc - 如何构建这个 ASP.NET n 层解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/730246/

相关文章:

mysql - 什么影响mysql中的日期格式?

c# - Mvc 标识 : Adding UserId to another table

c++ - 为什么/MANIFESTUAC :NO work?

c++ - 在 Windows 上使用 libcurl,在我的 c++ 项目中,使用 visual studio,因为字符串被损坏而不起作用

c# - 是否有网络服务或 API 可以帮助我阅读电子邮件联系人?

asp.net-mvc - 如果 Hangfire 已在运行,则停止启动重复作业

c++ - 如何使用 Visual Studio 自动记录断言?

architecture - DDD 有界上下文通信消息总线

logging - F# 应用程序结构日志记录/存储库等

php - Rackspace 云文件容器的元数据搜索功能?