2011-08-09 37 views
6

Tôi đã bắt đầu tìm cách xa cách MVC bình thường của việc tạo ra các ứng dụng web của tôi và đã có một cái nhìn tại Domain Driven Design - DDD.Sắp xếp cấu trúc thư mục của ứng dụng web dựa trên DDD của tôi?

Từ có Models một mình, bây giờ tôi có Collections, Entities, DataMappers & Repositories trong ứng dụng của tôi để làm việc với. Chính thức tách biệt và mô đun chắc chắn, nhưng bây giờ cấu trúc thư mục của tôi là gì, nhưng một mớ hỗn độn hoàn chỉnh!

Vì trước đây tôi chưa bao giờ làm việc với ứng dụng DDD, tôi có ít ý tưởng về cách tổ chức cấu trúc tệp của mình.

Dưới đây là cấu trúc thư mục thích hợp?
Lưu ý: Tôi đang sử dụng PHP5, nhưng tôi cho rằng câu hỏi này gần với sự bất khả tri về ngôn ngữ.

/application 
    /common 
     /libraries 
     /helpers 
    /temp 
     /cache 
    /domain 
     /collections 
     /entities 
     /datamappers 
     /repositories 
    /ui 
     /controllers 
     /view 

Trả lời

5

tôi sẽ nghĩ rằng có ý nghĩa, nhưng, có nghĩa là sẽ tách module của bạn vào gì lớp họ đang ở, chứ không phải sau đó những gì họ làm. Ví dụ, trong cấu trúc này, nếu bạn muốn một Authentication và in ấn các module, bạn sẽ có lẽ một cái gì đó như thế này:

/common 
     /helpers 
      /Authentication 
       /AuthenticationService.php 
      /Printing 
       /PrintingService.php 
    /domain 
     /entities 
      /Authentication 
       /Identity.php 
      /Printing 
       /Printer.php 
     /datamappers 
      /Authentication 
       /IdentityDataMap.php 
      /Printing 
       /PrinterDataMap.php 

Sau khi làm việc trong một hệ thống như thế này, tôi có thể nói cho một điều, nó được rất vất vả để giữ ranh giới giữa các mô-đun từ liên mạng, chỉ vì con người đang làm việc trong các lớp và suy nghĩ về các lớp là 'tất cả cùng nhau'. Chỉ từ quan điểm của tổ chức, tôi không thực sự muốn có ba thư mục cấp cơ sở mở để làm việc với một mô-đun cụ thể. Chúng tôi tổ chức các dự án thành các thư mục để giúp chúng tôi dễ dàng xử lý hơn, chứ không phải trình biên dịch.

Nếu tôi làm lại, tôi sẽ tách riêng một số mọi thứ theo lớp, mã giao diện người dùng, trên một cấp và mã doanh nghiệp trên một cấp khác, sau đó theo mô-đun bên dưới. Nhiều hơn một lai tôi giả sử, nhưng có lẽ tốt hơn cho nó.

/domain 
     /Printing 
      /entities 
      /datamappers 
      /repositories 
     /Auth 
      /entities 
      /datamappers 
      /repositories 
    /ui 
     /controllers 
     /view 
+6

bạn sẽ đặt đối tượng giá trị của mình ở đâu? – n3wb

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