У меня есть очень сложная проблема, которую мне нужно решить, и я много думал и искал, и пришел к одному выводу, который я упомяну ниже. проблема в том, что у меня есть клиент, который хочет создать веб-сайты на основе общей функциональности, поэтому давайте назовем его модулями, поэтому я подумал, что нужно использовать переносимые области MVC Contrib, которые являются отличными идеями для подключения модулей, но у меня есть большая проблема, скажем, я создал модуль блога, который будет реализован на новом сайте, который он хочет, теперь у некоторых пользователей есть уникальные требования, например, одному из них нужно добавить галерею изображений в каждую статью или список ссылок в каждой статье. это было бы легко в обычной ситуации, когда у вас есть один сайт для работы, поэтому все, что вам нужно сделать, это
- добавьте новую таблицу галереи с внешним ключом в таблицу Blog.
- повторно сгенерируйте код Linq2SQl и обновите модель.
- добавить новые элементы формы в представления «Создать», «Редактировать», «Удалить».
- добавить логику в контроллер.
но в моей ситуации это сложно и затратно по времени по 2 причинам
- если новый функционал классный и клиент решит внедрить его на всех сайтах, то мне придется повторять работу для каждого сайта.
- если функциональность уникальна, это создаст для меня несогласованность в будущем
вот почему в качестве первого шага для решения проблемы я использовал Portable Areas для создания дополнений для каждого модуля, теперь это определенно облегчит мою работу, перетащив 1 DLL для каждого нового модуля или дополнения, но у меня есть небольшая проблема, которая
- поскольку новый модуль или надстройка является библиотекой DLL, как я могу создать такую функциональность в панели «Моя администрация», чтобы установить новый аддон или найти любой новый добавленный модуль / аддон, перетащив новые библиотеки DLL в основное приложение.
- Как лучше всего создать процедуру установки внутри переносимой области, например, обновить БД, создать новые маршруты и т. д.?
Теперь к самой большой проблеме, которая характерна для аддона модуля :) давайте вернем аддон галереи статей, если я буду следовать логике, которую я упомянул выше, создав ее как переносимую область, было бы проще создать функциональность в модуле Код для перебора всех установленных надстроек и перечисления их в представлениях CRUD, но поскольку я изолировал надстройку и не хочу вручную обновлять код основного модуля по вышеуказанным причинам, не будет возможности выполнять операции CRUD для новых надстроек. в синхронизации с основным модулем, потому что нет связи с внешним ключом, опять же, потому что, как я уже сказал выше, он может быть необязательным, поэтому я подумал о следующем решении, которое, я надеюсь, будет лучше
Сначала в процессе установки я создам таблицу для надстройки галереи, но вместо создания отношения внешнего ключа я создам внешний ключ вручную, который будет заполняться путем создания уникального идентификатора в контроллере основного модуля, когда я создаю запись с помощью следующий код, затем сохраните его в ViewData и просто передайте его контроллеру надстроек, когда я создаю новую запись,
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();
но вот мои опасения
- Это возможно или просто глупо.
- Этот метод позволит сгенерировать действительно уникальный ключ.
Мне очень жаль, если мой вопрос хромает, но это лучшее место, чтобы спросить, и я думаю, что многие люди хотели бы иметь такую функциональность и надеюсь, что кто-то мне ответит.