6

Có vẻ như không có bất kỳ tập hợp thực hành tốt nhất và cố gắng nào để hướng dẫn bạn cách thiết lập các giải pháp, dự án và hội đồng của bạn. Microsoft dường như có tried trở lại trong những ngày VS.net, nhưng họ đã từ bỏ nội dung này. Đối với mọi phương pháp tôi đọc về tôi đọc khác mà tuyên bố ngược lại là tốt hơn, hoặc một bài mà chỉ liên quan đến chính nó với "nếu chỉ Microsoft sẽ ..." nhưng thực sự cung cấp không có giải pháp. Có vẻ như có nhiều cách để làm điều này mà tất cả dường như làm việc cho các nhóm khác nhau trong hoàn cảnh của họ, do đó tôi nghĩ tôi sẽ hỏi bạn sử dụng quy ước nào và tại sao họ làm việc cho BẠN trong hoàn cảnh của bạn.Tìm kiếm các đề xuất về giải pháp Microsoft Visual Studio và Quy ước đặt tên dự án

Tôi hy vọng điều này sẽ cung cấp một số quy ước tốt cho các tình huống khác nhau, các nhóm phát triển nhỏ và các dự án cho các nhóm và dự án phát triển đa dạng lớn.

gì ước nào bạn sử dụng để ...

  • tên giải pháp của bạn, và tại sao?
  • đặt tên cho các dự án của bạn và tại sao?
  • đặt tên cho hội đồng của bạn và tại sao?
  • biết khi nào cần tạo dự án mới hoặc thêm vào dự án hiện tại và tại sao?
  • biết khi nào nên chia nhỏ giải pháp thành các giải pháp nhỏ hơn và tại sao?
  • biết khi nào nên chia nhỏ dự án thành nhiều dự án và tại sao?

Chỉ cần rõ ràng, WHY chỉ là nhập như CÁCH trong các câu trả lời này. Có rất nhiều câu trả lời được đăng tải về cách thức ở đây và những nơi khác, rất ít người nói tại sao họ sử dụng một quy ước trên một quy tắc khác.

Trả lời

3

Đó là một câu hỏi rất rộng, nhưng là câu hỏi hay. Tôi sẽ bắt đầu với một cấu trúc đơn giản mà tôi sử dụng cho các dự án web ASP.Net (MVC sẽ trông hoàn toàn khác nhau).

Đặt tên giải pháp không phải là vấn đề lớn đối với tôi. Tôi có xu hướng tạo ra các giải pháp cho một mục đích cụ thể và thêm các dự án hiện có vào các giải pháp. Nếu giải pháp của bạn là hơn 15 dự án (chỉ là một số thô), hãy xem xét thêm một số dự án đó làm tham chiếu. Hầu hết mọi người không cần phải làm việc trên hơn 15 dự án cùng một lúc.

Đặt tên dự án là một vấn đề lớn đối với tôi.

// class library that supports the site itself and abstracts 
// more complicated UI logic into a separate place 
Company.ProductName.Web; 

// website 
Company.ProductName.Web.UI; 

// main business object library for product 
// 
// of course, you can have as many of these as needed. 
Company.ProductName; 

Tôi cố gắng sử dụng đủ thư mục trong dự án để tất cả các tệp trong thư mục có thể dễ dàng xem mà không cần cuộn trình khám phá giải pháp.

Dự án web điển hình của tôi trông giống như thế này. Lưu ý khác nhau trong vỏ để đại diện cho các tài nguyên không gian tên/compilable so với những người không.

  • client (css, javascript)
  • cấu hình (tư nhân, tập tin tùy chỉnh cấu hình, nếu có)
  • Content (Master Pages, ASPXs và ASCXs, chia thành các thư mục logic)
  • Handlers (ASHXs và như vậy)
  • hình ảnh
  • MSBuild (xây dựng kịch bản)
  • WebServices (những chỉ nên được dịch vụ nhỏ có liên quan trực tiếp đến các trang web trong câu hỏi. Nếu không, b reak chúng vào một dự án riêng biệt).

Tôi đã bắt đầu sử dụng các lớp một phần ngày càng nhiều để tạo các lớp học toàn diện có thể thực hiện được nhiều thứ mà không cần mã bị lộn xộn. Ví dụ, gần đây tôi đã tạo một dịch vụ web có mục đích duy nhất là trả về JSON cho máy khách, nhưng logic được lan truyền trên gần một tá các lớp một phần để tổ chức tốt hơn.

Hy vọng bạn sẽ bắt đầu.

+0

Làm thế nào để bạn mở rộng quy mô này cho các ứng dụng lớp doanh nghiệp lớn với nhiều mô-đun? Làm thế nào để bạn quản lý thay đổi tên công ty? –

+0

Để bắt đầu, hãy thực hiện kiểm soát phiên bản và nguồn. Nếu bạn thay đổi tên của công ty, hãy tạo một phiên bản mới của sản phẩm và thực hiện tìm kiếm/thay thế lớn trên giải pháp. Không quyến rũ, nhưng nó hoạt động, và với một cách tiếp cận phiên bản bạn không phá vỡ khả năng tương thích với các sản phẩm phụ thuộc vào nó. Về lớp doanh nghiệp, đó là chủ quan ... thách thức lớn nhất sẽ giúp các dự án ứng dụng giao diện người dùng của bạn không thể kiểm soát được. Với web, bạn có thể sử dụng SOA trong nhiều dự án; với Windows, hình thức/kiểm soát thừa kế có thể giúp chia nhỏ các dự án giao diện người dùng lớn. –

+0

Thành thật mà nói, trừ khi có một người lái xe kinh doanh lớn để đổi tên, tôi sẽ đặt mức thấp đó vào danh sách ưu tiên. Nhiều công ty (bao gồm Microsoft) sẽ mua một sản phẩm và giữ lại tên cũ hơn là đối phó với những rắc rối. –

2

Trong trường hợp của chúng tôi, chúng tôi giữ tên dự án của chúng tôi khá giống với các không gian tên mà chúng tôi đã chọn để lắp ráp cụ thể. Bằng cách đó nó trở nên dễ dàng để bản đồ vị trí của một tập tin lớp học trong thư mục vật lý. Ví dụ: CompanyName.BusinessLine.BusinessService hoặc CompanyName.Framework.Security. Vì vậy, nếu nhà phát triển đang xem CompanyName.Framework.Security.Cryptography.cs, anh ấy có thể ngay lập tức tìm ra dự án và mở dự án đó.

+1

Trình duyệt đối tượng Visual Studio "làm cho nó đơn giản để tìm assembly có chứa một class đã cho, bất kể các namespace match hay mismatches. –

+0

Tôi không nhớ nếu nó cho bạn biết vị trí lắp ráp như mã nguồn như vậy. – Pradeep

+1

Bạn sẽ mở rộng quy mô này như thế nào cho một ứng dụng doanh nghiệp lớn với hàng chục hoặc hàng trăm mô-đun? Làm thế nào để bạn quản lý các dự án và các giải pháp nếu bạn phải tái cấu trúc các khu vực cảm ứng lớn mà qua nhiều dự án và giải pháp? Làm thế nào để bạn quản lý thay đổi tên công ty kể từ khi bạn có tên của công ty trong không gian tên và tên dự án? –

2

Như Tim nói, điều này rất rộng. Một vài điều cần lưu ý:

  • Giải pháp thường là chỉ một tập hợp các dự án. Nhiều giải pháp có thể bao gồm các dự án tương tự, ví dụ. Như vậy, nó không quan trọng quá nhiều: nếu bạn không thích một tên giải pháp, bạn có thể vứt nó đi mà không cần tái cấu trúc.
  • Giống như Pradeep, tôi có xu hướng đặt tên cho các dự án có không gian tên cấp cao nhất mà chúng chứa. Các không gian tên "sâu hơn" kết thúc trong các thư mục con, do đó các lớp trong không gian tên Foo.Bar.Baz có thể nằm trong thư mục Baz của dự án Foo.Bar.

Tôi có xu hướng chia thành các dự án trên:

  • Các yếu tố của việc tái sử dụng (ví dụ như một lắp ráp cho một giao diện người dùng, một cho một tập thể tái sử dụng các lớp mô hình, một cho một lớp tiện ích đa năng tái sử dụng)
  • Các yếu tố triển khai (ví dụ: một cho sản xuất, một để thử nghiệm, theo cặp)
  • Các yếu tố tham chiếu (ví dụ: nếu bạn có lắp ráp chung Skeety.Common với một số giao diện khác giúp bạn kiểm tra các lớp học bằng cách sử dụng Skeety.Common).Điều này dẫn đến những quy tắc:
    • lắp ráp sản xuất chỉ có thể tham khảo để lắp ráp sản xuất khác
    • Testing hội chỉ có thể tham khảo để lắp ráp sản xuất và lắp ráp sản xuất khác
    • lắp ráp thử nghiệm (những người có chứa các bài kiểm tra bản thân) chỉ có thể tham khảo để sản xuất và thử nghiệm lắp ráp, chưa lắp ráp thử nghiệm khác
    • không tham chiếu vòng tròn được cho phép, rõ ràng

Trong nhiều trường hợp, thực sự là không quan trọng quá mức bạn phân chia mọi thứ - nhưng nó giúp làm cho thiết kế sạch hơn khi bạn tìm ra các lớp phụ thuộc (vì vậy một hội thảo logic kinh doanh không nên tham chiếu đến Giao diện người dùng, nhưng ngược lại là tốt).

Có quá nhiều dự án chắc chắn có thể làm chậm bạn xuống, cả về mặt thời gian xây dựng và chỉ làm việc ở nơi mọi thứ nên có. Có quá vài dự án làm cho thiết kế ít rõ ràng hơn. Theo thời gian, bạn có thể cảm nhận được nhiều hơn về cảm giác ruột vì cách mọi thứ nên được đặt ra - nhưng tôi đã bị thổi nếu tôi tuyên bố luôn biết hành động tốt nhất :)

+0

Bạn sẽ mở rộng quy mô này như thế nào? Cho phép nói rằng bạn có một bộ kinh doanh tích hợp lớn, và bạn chắc chắn rằng bạn làm theo nguyên tắc DRY và SOLID. Giả sử bộ phần mềm này có các mô-đun cấp cao sau: CRM, ERP, PLM, SCM, SRM, v.v.Có rất nhiều mã chung được chia sẻ giữa chúng, và bạn cũng có một giao diện người dùng chung, và mỗi một trong những thứ này có móc/điểm mở rộng nơi chúng tích hợp với nhau. Tôi có thể thấy cách bạn có thể có các giải pháp cho mỗi mô-đun, và chúng có thể rất lớn đối với các mục mức cao này. –

+0

@Creepy: Mã được chia sẻ giữa các giải pháp khác nhau có thể nằm trong các dự án được bao gồm trong tất cả chúng hoặc chỉ trong các tệp nhị phân của thư viện lớp được tham chiếu bởi tất cả chúng. –

+0

Cảm ơn, dường như tôi đang gặp khó khăn khi tìm cách tiếp cận cân bằng với các nguyên tắc đóng gói của Robert C. Martin (REP, CCP, CRP, ADP, SDP và SAP). Có lẽ tôi chỉ nghĩ về vấn đề, vì nó không phải là một nhiệm vụ dễ dàng khi tôi nhìn vào dự án phát triển hiện tại, trong khi lập kế hoạch cho dự án phát triển tiếp theo, và cố gắng tính đến các dự án phát triển trước đó. Có lẽ tôi nên dừng lại, và chỉ tập trung vào hiện tại, vì nó có vẻ quá khó khăn với các công cụ Microsoft cung cấp với Visual Studio và TFS để thực sự nghĩ rằng bất kỳ cách nào khác. –

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