22

Tôi đang thiết lập một cấu trúc dự án cho một ứng dụng nội bộ sắp tới thử nghiệm kiến ​​trúc Onion do Palermo đề xuất (http://jeffreypalermo.com/blog/the-onion-architecture-part-3/).Kiến trúc Onion

Tôi đã làm theo hướng dẫn của anh ấy, tuy nhiên tôi cần một số xác minh về cấu trúc của dự án cho đến thời điểm này.

Trước khi sơ đồ, các câu hỏi:

  1. Tôi nghĩ References đều đúng (thành lập theo sơ đồ nơi một mũi tên có nghĩa là 'có một tham chiếu đến') nhưng một số xác minh sẽ là tốt .

  2. Tôi nên đặt gì trong lớp phân giải phụ thuộc của mình? Đây có phải là nơi Người trợ giúp đi không? Điều này có liên quan đến tất cả các dự án khác?

  3. Dịch vụ web & Giao diện người dùng, giao tiếp với DAL như thế nào? (Thông qua lõi? Làm thế nào?)

  4. Điều gì sẽ xảy ra ở đâu? [Broad câu hỏi tôi biết ...]

Sơ đồ khái niệm đơn giản như sau (Folders đại diện cho không gian tên):

enter image description here enter image description here

+6

Tôi nghĩ rằng việc đặt 'Giao diện' bên trong' Cơ sở hạ tầng' là sai. Nó phải là một phần của 'Core'. – Jaider

Trả lời

7

Tôi nghĩ rằng tham chiếu là chính xác (được thiết lập theo biểu đồ có mũi tên có nghĩa là 'tham chiếu đến') nhưng một số xác minh sẽ tốt.

1 Có vẻ OK nhưng tôi không chắc chắn nên chèn độ phân giải phụ thuộc vào biểu đồ.

Tôi nên đặt gì vào lớp phân giải phụ thuộc của mình? Đây có phải là nơi Helpers không? Điều này có liên quan đến tất cả các dự án khác?

2 Tôi tin rằng công cụ tiêm phụ thuộc sẽ có tại đây.

Dịch vụ web & Giao diện người dùng, giao tiếp với DAL như thế nào? (Thông qua lõi? Làm thế nào?)

3 Đó là cốt lõi theo biểu đồ của Palermo. Trong lõi, bạn sẽ có kho lưu trữ nói chuyện với DAL và các mô hình miền, và các dịch vụ (không phải các dịch vụ web) đối phó với các kho lưu trữ và các mô hình miền. Và UI/dịch vụ web chủ yếu sẽ nói chuyện với các dịch vụ.

Điều gì sẽ xảy ra ở đâu? [Câu hỏi rộng tôi biết ...]

4 Một lần nữa, tôi nghĩ câu trả lời nằm trong biểu đồ của Palermo. Nhưng theo ý kiến ​​của tôi, việc tổ chức các dự án có thể khác và tầm thường khi có sự hiểu biết đầy đủ về kiến ​​trúc.

Kiến trúc hành trình trở nên rõ ràng đối với tôi khi tôi hiểu DDD và các mẫu thiết kế cần thiết như MVC, Dependency injection, Repository/Service, ORM.

6
  1. Có họ đang có, mong đợi cho các phụ thuộc Độ phân giải. Những phụ thuộc này nên là cách khác xung quanh.
  2. Vì tên (và các tham chiếu đã sửa) ngụ ý mục đích của nó là lưu trữ một số giải pháp IoC Container. Đó không phải là nơi dành cho các lớp Helper , mong đợi các lớp trợ giúp cho mục đích giải quyết.
  3. Cốt lõi xác định Giao diện cho DAL hoặc Dịch vụ miền. DAL và Các dịch vụ web triển khai các giao diện này. Bên trong giao diện người dùng, bạn sẽ sử dụng triển khai DAL hoặc Dịch vụ thông qua các giao diện được xác định. việc triển khai chính xác sẽ được giải quyết thông qua sự trợ giúp của thành phần Độ phân giải phụ thuộc (xem khái niệm về "Đảo ngược kiểm soát" hoặc "Dependency Injection").
  4. Như được mô tả trong 3. điều chính là, trong Core bạn đặt các giao diện sẽ được triển khai bên trong DAL và Dịch vụ Web. Và trong Core, bạn sẽ triển khai mô hình kinh doanh thực của mình. mô hình này có thể sử dụng DAL và các Dịch vụ Web thông qua các giao diện được xác định (với sự trợ giúp của thành phần Độ phân giải phụ thuộc).
+0

Bạn có chắc chắn về độ phân giải phụ thuộc không? Nếu vậy, điều đó có nghĩa là sự phụ thuộc sẽ ở bên trong hành tây, chứ không phải bên ngoài? Và điều này có nghĩa là Core phụ thuộc vào hội đồng phân giải phụ thuộc - điều này dường như không đúng? – Darbio

+0

Phải, cốt lõi sẽ không phụ thuộc vào DR. Nhưng những người khác cần DR để thực hiện các giao diện Core: ví dụ trong giao diện người dùng: {DR.Resolve (). CallserviceMethod(); } – rObiwahn

+3

Tôi không đồng ý về độ phân giải phụ thuộc, rObiwahn. DR nên ở trên lớp ngoài và tham khảo các lớp bên trong. Bằng cách nói 'DR.Resolve (ISomeService)' nó có vẻ giống như dịch vụ định vị anti-pattern. Độ phân giải phụ thuộc cần phải biết tất cả các triển khai ở đâu để nó có thể giải quyết chúng khi cần. –