У меня есть очень сложная проблема, которую я должен решить, и я много думал и искал и пришел к одному выводу, который я упомяну ниже.проблема в том, что у меня есть клиент, который хочет создавать веб-сайты на основе общей функциональности, поэтому давайте назовем его модулями, поэтому я решил использовать переносимые области MVC Contrib, которые являются отличными идеями для подключения модулей, но у меня естьбольшая проблема, скажем, я создал модуль блога, который будет реализован на новом сайте, который он хочет, теперь у некоторых пользователей есть уникальные требования, например, одному из них нужно добавить галерею изображений в каждую статью или список ссылок в каждой статье.это было бы легко в обычной ситуации, когда у вас есть один сайт для работы, поэтому все, что вам нужно сделать, это
- добавить новую таблицу галереи с внешним ключом в таблицу блогов.
- восстановить код Linq2SQl и обновить модель.
- добавить новые элементы формы в Create, Edit, Delete Views.
- добавить логику в контроллере.
но в моей ситуации это сложно и требует много времени из-за 2 причин
- если новая функциональность хороша, и клиент решает внедрить ее на всех сайтах, то я должен повторить работу для каждого сайта,
- если функциональность уникальна, это создаст для меня несогласованность в будущем
, поэтому в качестве первого шага для решения проблемы я использовал Portable Areas для создания дополнений для каждого модуля, теперьэто определенно облегчит мою работу, перетаскивая 1 DLL для каждого нового модуля или аддона, но у меня есть небольшая проблема, которая
- , потому что новый модуль или аддин является Dll, как я могу создать такойфункция в панели «Мой администратор» для установки нового дополнения или поиска любого нового добавленного модуля / надстройки, перетаскивающего новые DLLS в основное приложение
- Какова лучшая практика для создания процедуры установки внутри переносимой области, например, обновление базы данных, Новые маршруты и т.д ..
Теперь к самой большой проблеме, которая специфична для модуля Addon :), давайте вернем аддон Gallery Gallery, если я буду следовать логике, упомянутой выше, создавая ее.как переносимая область, было бы легче создать функциональность в модуле Code для циклического прохождения всех установленных аддонови перечислите их в представлениях 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();
, но вот мои опасения
- Это возможно или просто глупо.
- , этот метод генерирует действительно уникальный ключ.
Мне очень жаль, если мой вопрос хромает, но это лучшее место, чтобы спросить, и я думаю, что многие люди захотятиметь такую функциональность и надеяться, что кто-то ответит мне