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)
谢谢偷看.
您看过 Rob Connery 的 MVC Storefront/ Kona项目吗?他正在与 WF 做非常相似的事情,并且他的项目的布局也有些相似。这可能对您正在做的事情有很好的指导。我知道他确实与一些 Workflow Foundation 专家合作设计了他的集成。
归档时间: |
|
查看次数: |
1299 次 |
最近记录: |