Tôi có một vấn đề rất khó khăn để giải quyết, và tôi nghĩ và tìm kiếm rất nhiều và đi xuống một kết luận mà tôi sẽ đề cập đến. vấn đề là tôi có một khách hàng muốn tạo một trang web dựa trên chức năng chung, vì vậy chúng tôi gọi nó là Mô-đun, vì vậy điều tôi nghĩ là sử dụng Khu vực di động của MVC Contrib, đó là những ý tưởng tuyệt vời để cắm Mô-đun, nhưng tôi có một vấn đề lớn, chúng ta hãy nói rằng tôi đã tạo một mô-đun Blog sẽ được triển khai trong một trang web mới mà anh ta muốn, hiện tại một số người dùng có yêu cầu duy nhất như một trong số họ cần thêm Thư viện ảnh cho từng bài viết hoặc Danh sách tham chiếu trong mỗi bài viết . điều này sẽ dễ dàng trong tình huống bình thường khi bạn có một trang web để làm việc, vì vậy tất cả những gì bạn phải làm làMô-đun phức tạp Dựa Tạo bản ghi mới trong DB với ASP.NET MVC 2
- thêm một bảng bộ sưu tập mới với khóa ngoài vào bảng Blog.
- tạo lại mã LINq2SQl và cập nhật Mô hình.
- thêm các phần tử biểu mẫu mới vào Tạo, Chỉnh sửa, Xóa chế độ xem.
- thêm logic trong bộ điều khiển.
nhưng trong hoàn cảnh của tôi nó là phức tạp và thời gian cồng kềnh vì 2 lý do
- nếu các chức năng mới là mát mẻ và khách hàng quyết định thực hiện nó trong tất cả các trang web, sau đó tôi phải lặp lại hoạt động cho mỗi trang web.
- nếu các chức năng là duy nhất nó sẽ tạo ra sự mâu thuẫn đối với tôi trong tương lai
đó là lý do tại sao như bước đầu tiên để giải quyết vấn đề tôi đã sử dụng khu vực di động để tạo Addons cho mỗi mô-đun, bây giờ điều này chắc chắn sẽ giảm bớt công việc của tôi bằng cách kéo 1 DLL cho mỗi mô-đun mới hoặc Addon, nhưng tôi có một vấn đề nhỏ ở đây, mà
- vì module mới hoặc Addin là một DLL , làm thế nào tôi có thể tạo ra một chức năng như vậy trong bảng quản trị của tôi để cài đặt Addon mới hoặc tìm bất kỳ mới thêm Module/Addon kéo DLL mới đến ứng dụng chính
- là gì tốt nhất thực hành để tạo ra một cài đặt thủ tục bên trong khu vực di động, như Update DB, đường mới, vv ..
Bây giờ vấn đề lớn nhất dành riêng cho Module Addon :) chúng ta hãy lấy lại Thư viện bài viết Addon, nếu tôi làm theo logic tôi đã đề cập ở trên. để tạo một chức năng trong Mã Mô-đun để lặp qua tất cả các Cài đặt Addons và liệt kê chúng trong Chế độ xem CRUD, nhưng vì tôi đã tách Addon và không muốn cập nhật Mã Mô-đun Chính theo cách thủ công vì các Lý do Ở trên sẽ không có cách nào cho thực hiện các hoạt động CRUD cho Addons mới trong Sync với mô-đun chính vì không có quan hệ khóa ngoại, vì tôi đã nói ở trên có thể là tùy chọn, vì vậy tôi nghĩ về giải pháp sau mà tôi hy vọng sẽ có một giải pháp tốt hơn
Đầu tiên trong quá trình cài đặt Tôi sẽ tạo một Bảng cho Gallery Addon, nhưng thay vì tạo ra một quan hệ Key ngoài, tôi sẽ tạo ra một Foreign Key bằng tay để tạo một ID duy nhất trong Main Module Controller khi tạo bản ghi bằng cách sử dụng đoạn mã sau rồi lưu nó trong ViewData và chỉ cần vượt qua nó để điều khiển Addon khi tôi tạo mới ghi,
private string GenerateId()
{
long i = 1;
foreach (byte b in Guid.NewGuid().ToByteArray())
{
i *= ((int)b + 1);
}
return string.Format("{0:x}", i - DateTime.Now.Ticks);
}
ViewData["FK"] = GenerateId();
nhưng đây là Mối quan tâm của tôi
- là cách này khả thi hoặc chỉ đơn giản ngốc .
- là kỹ thuật này sẽ tạo ra một khóa thực sự độc đáo.
Tôi vô cùng xin lỗi nếu câu hỏi của tôi là khập khiễng, nhưng đây là nơi tốt nhất để hỏi và tôi nghĩ nhiều người sẽ muốn có một chức năng như vậy và hy vọng ai đó sẽ trả lời tôi
Nó không phải là một câu hỏi què chút nào, nhưng nó * là * một câu hỏi thiết kế, đòi hỏi một chút suy nghĩ. Tôi không nghĩ rằng thiết kế cơ sở dữ liệu của bạn nên bao giờ yêu cầu bạn tạo ra ID của riêng bạn, mặc dù.Bản năng của tôi là bạn cần một bảng chứa tất cả thông tin plugin của bạn (nếu đó là những gì bạn đang làm), với một cột bổ sung để phân biệt các plugin với nhau. Điều này sẽ cho phép bạn sử dụng cùng một lược đồ LINQ to SQL cho tất cả các plugin. Nếu có thông tin duy nhất cho một plugin cụ thể, bạn có thể tạo một lược đồ LINQ to SQL riêng biệt cho thông tin duy nhất của plugin đó. –
Giản đồ LINQ to SQL riêng biệt có thể hoạt động với plugin, do đó bạn không bắt buộc phải cập nhật lược đồ LINQ to SQL chính mỗi khi bạn thêm một plugin với thông tin duy nhất. Đây chỉ là một trong nhiều cách mà vấn đề có thể được giải quyết. –
thanks guys nhưng, bạn có thể cho tôi biết chính xác những gì tôi nên bao gồm trong Schema plugin, chỉ có các Plugin Plugin? một vấn đề khác vẫn còn tồn tại là làm thế nào tôi có thể kết nối các hồ sơ mới được chèn vào với Plug ins, là nó như tôi đã đề cập hoặc có cách tốt hơn? – DevMania