5

Tôi gặp sự cố khi cố gắng bố cục giải pháp VS của mình và tôi muốn một số đề xuất.Làm thế nào để kiến ​​trúc sư giải pháp n-tier ASP.NET này?

Hiện nay, bố trí giải pháp của tôi trông giống như dự án sau: -

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

trang web của tôi (Foo.Web) gọi phương pháp khác nhau về không gian tên Foo.Services. Ý tưởng ở đây là Services xử lý tất cả logic nghiệp vụ. Không gian tên Model chỉ là POCO đối tượng. Repositories không gian tên là tự giải thích.

Constructor Dependency Injection với giao diện xử lý ma thuật đen của lớp nào yêu cầu thành phần nào.

Vấn đề: Tôi muốn thêm một số mã của Windows Workflow Foundation (WWF) vào giải pháp, nhưng đặt mã WWF này trong cùng Foo.Services.dll.

Để thực hiện việc này, tôi cần thực hiện một dự án khác thuộc loại Workflow. Luồng công việc này có các hoạt động, gọi các phương thức Foo.Services. Như vậy, trang web của tôi bây giờ phải gọi phương thức dịch vụ HOẶC phương pháp quy trình làm việc, để thực hiện công cụ.

Tôi đã hy vọng rằng các trang web chỉ bao giờ gọi Services namespace để làm công cụ.

Sau khi tất cả, dịch vụ là giao diện chính giữa UI và logic kinh doanh, IMO. Thực tế là tôi về mặt kỹ thuật sử dụng WWF không phải là một mối quan tâm cho một người nào đó mã hóa trong lối vào IUI.

Vì dll luồng công việc gọi các phương thức trong dll Dịch vụ, dll Dịch vụ không thể gọi phương thức trong Quy trình làm việc do phụ thuộc vòng tròn.

Tôi cũng không thể di chuyển tất cả các mã workflow VÀO Dịch vụ dll vì các Dịch vụ dll cần phải có một số loại dự án đặc biệt (kiểu Windows Workflow).

Vì vậy, tôi không biết phải làm gì?

Làm thế nào tôi có thể làm cho nó để người tiêu dùng chỉ tham khảo không gian tên dịch vụ cho các công cụ kinh doanh và thực tế tôi impliment công cụ kinh doanh này trong WWF được ẩn từ người tiêu dùng?

Do i cần phải thực hiện một dự án của WWF và di chuyển tất cả các mã dịch vụ của tôi vào đó, ném đi những dự án dịch vụ cũ? Làm điều này doesnt 'âm thanh rất tái sử dụng. Điều gì xảy ra nếu tôi quyết định không sử dụng WWF để xử lý các hành động pipline nhất định và sử dụng một cái gì đó khác?

Dưới đây là một số mã để giúp giải thích.

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. 
    } 
} 

Cảm ơn peeps.

Trả lời

1

Bạn đã nhìn Kona dự án/MVC Storefront Rob Connery không? Anh ấy đang làm a very similar thing with WF và dự án của anh ấy là laid out in a somewhat similar way. Nó có thể là good guidance cho những gì bạn đang làm. Tôi biết rằng anh ấy đã làm việc với một số chuyên gia về Workflow Foundation trong việc thiết kế sự tích hợp của anh ấy.

+0

chắc chắn có. đó là nơi tôi dựa vào nội dung của tôi. Tôi hơi bối rối bởi những thay đổi của anh ấy từ SF -> Kona. –

0

Một giải pháp có thể sẽ có thêm một 'Ứng dụng' lớp

Application ---> Services 
        ^
        | 
      \--> Workflow 

Và gọi lớp ứng dụng từ giao diện người dùng. Tất nhiên trong hầu hết các trường hợp, lớp ứng dụng sẽ chỉ chuyển tiếp các cuộc gọi đến các dịch vụ hoặc quy trình làm việc.

0

FYI- Có thể sửa đổi dự án không phải luồng công việc để cho phép bổ sung các Lớp công việc. Chi tiết here.

+1

Vì vậy, mặc dù tôi có thể thay đổi dự án thư viện lớp thành một dự án WF .. điều đó thực sự trả lời vấn đề của tôi từ một quan điểm kiến ​​trúc? Nó có thể được thực hiện nhưng NÊN tôi đang làm điều này? –

Các vấn đề liên quan