Cấu trúc thư mục cho một giải pháp .NET


16

Gần đây chúng tôi đã có một chuyến thăm nhà thầu, người đã đặt câu hỏi về phương pháp cấu trúc dự án của chúng tôi. Xin lưu ý rằng tôi đặc biệt đề cập đến cấu trúc thư mục. Ông đề nghị sử dụng các hướng dẫn của Microsoft. Tôi nghĩ rằng tôi sẽ có thể Google "Microsoft hướng dẫn cấu trúc thư mục dự án .NET" và tìm thấy một cái gì đó hữu ích, tuy nhiên điều này đã được chứng minh là không phải như vậy. Khi nó đứng, chúng tôi làm một cái gì đó như thế này:

[Company.System.Feature]
  |-doc
     |Sandcastle project
  |-lib
     |Nuget packages
  |-src
    |-Project1 e.g. web
    |-Project2 e.g. business logic
    |-UnittestProject1
    |-Specs

Thư mục doc chứa một giải pháp Sandcastle giống như những gì được mô tả ở đây: https://www.codeproject.com/Articles/15176/Sandcastle-Help-File-Builder (xem: đường dẫn tuyệt đối và tương đối). Do đó, thư mục doc chứa thư mục Trợ giúp chứa tệp trợ giúp được tạo. Thư mục lib chứa tất cả các gói Nuget.

Có bất kỳ hướng dẫn nào của Microsoft, khuyến nghị cách cấu trúc một giải pháp không? Tôi đã xem ở đây: /programming/789389/project-structure-for-c-sharp-development-effort/789554?noredirect=1#comment86756309_789554 trong số những nơi khác. Hầu hết các bài báo và câu hỏi tôi đã đọc dường như được tạo ra 2007-2009. Tôi tin rằng Nuget đã được giới thiệu vào năm 2010. Có hướng dẫn nào của Microsoft không? Tôi đã đọc về một thứ gọi là Bác sĩ phẫu thuật cây, tuy nhiên điều này dường như không còn tồn tại nữa: https://archive.codeplex.com/?p=treesurgeon .

Tôi đang sử dụng TFS; Cruise Control và DDD là điều làm nên sự khác biệt.


4
Cấu trúc thư mục là rất nhiều vấn đề của hương vị. Sử dụng cấu trúc thư mục nêu rõ nhất ý định dự án / tổ chức của bạn.
Robert Harvey

5
Ngoài ra, lần tới khi ai đó nói rằng bạn nên tuân theo "Nguyên tắc của Microsoft" về vấn đề gì đó, hãy yêu cầu người được nói cung cấp các hướng dẫn đó hoặc cho bạn biết nơi bạn có thể tìm thấy chúng. Nếu không, đó là lời khuyên vô ích.
Robert Harvey

2
bit lẻ đang đặt các gói nuget trong lib thay vì các gói
Ewan

1
@Ewan, các gói nuget thậm chí không thuộc về packagesnữa, cho các dự án kiểu dotnetcore và VS2017. Bây giờ họ sống trong các objthư mục của dự án .
David Arno

2
pff! nâng cấp?!?!? Nghe có vẻ như nó có thể phá vỡ mọi thứ
Ewan

Câu trả lời:


20

Trên MSDN, có một số hướng dẫn chính thức rất cũ . Đây là hết hạn mặc dù. Như trang nói, " Nội dung này đã lỗi thời và không còn được duy trì. Nó được cung cấp như một phép lịch sự cho những cá nhân vẫn đang sử dụng các công nghệ này. " Vì vậy, tôi khuyên bạn nên tránh những hướng dẫn này.

Đã có một nỗ lực để xác định cấu trúc giải pháp chung thông qua Project Scaffold . Điều này được định hướng nhiều hơn về F #, thay vì C #. Nó đã không thực sự cất cánh và có rất ít dấu hiệu phát triển ý tưởng ngày nay.

Bộ hướng dẫn tích cực và cập nhật nhất được duy trì bởi David Fowler, một nhà phát triển tại Microsoft trong nhóm ASP.NET. Các hướng dẫn này được sử dụng bởi nhiều người trong Microsoft, bao gồm các nhóm Roslyn (trình biên dịch C # và VB.Net). Do đó, bạn có thể làm tồi tệ hơn nhiều so với việc áp dụng phương pháp đó.


Tôi thấy hai liên kết đầu tiên, nhưng không phải là liên kết thứ ba. +1 cho liên kết thứ ba. Tôi sẽ đặt toàn bộ dự án Sand Castle của mình vào thư mục tài liệu hay chỉ các tệp Trợ giúp được tạo bởi dự án Sandcastle? Không chắc chắn tại sao câu trả lời này đã bị bỏ qua.
w0051977

1
Công bằng mà nói, mọi trang không có trong hệ thống tài liệu mới của Microsoft đều được đóng dấu với dòng chữ "nội dung này đã lỗi thời và không còn được duy trì." Điều đó không có nghĩa là không có một số thông tin hữu ích ở đó.
Robert Harvey

Bạn sẽ đặt Thông số kỹ thuật? Trong thư mục Kiểm tra hoặc trong thư mục có tên là Thông số kỹ thuật (trong cùng thư mục với thư mục src)? Tôi đoán nó không thực sự quá quan trọng.
w0051977

@RobertHarvey: Đủ công bằng, nhưng chỉ tham khảo trang đó mà không có gì để sao lưu cũng không phải là lý do để thay đổi cấu trúc thư mục dự án nếu một trang khác đã được thiết lập.
Flater

Bạn có thể thấy các hướng dẫn của David Fowlers trong thực tế tại hầu hết các dự án nguồn mở tại GitHub, ví dụ Enity Framework .
pfx
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.