Дизайн приложений / архитектура - PullRequest
0 голосов
/ 27 марта 2012

Я пытаюсь спроектировать для следующего сценария, но не могу обойти его.

У меня есть записи в таблице базы данных, которые представляют задачу, которую приложение должно выполнить.Каждая запись сопоставляется с определенной функцией C #.Поэтому добавление строки в таблицу требует перестройки приложения путем создания для него конкретной задачи.

До сих пор я добавлял базовый класс и создавал новый класс каждый раз, когда необходимо добавить новую функциональность.

Базовый класс:
public abstract class TaskBase<br> { public abstract void DoWork (); }
public sealed class Task001: TaskBase<br> { public override void DoWork () { /* Record-specific code */ } }
public sealed class Task002: TaskBase<br> { public override void DoWork () { /* Record-specific code */ } }

Трудно объяснить, почему это нужно сделать, поэтому я не пойду туда,Хотя я уверен, что есть лучший способ достичь этого с точки зрения дизайна и практичности.Какие-либо предложения?Я использую C #, и отражательные возможности .NET действительно помогают здесь.

1 Ответ

0 голосов
/ 31 марта 2012

Вы можете сделать базовый класс интерфейсом в общей DLL, а затем для каждой задачи вам потребуется новая DLL с реализацией TASK DoWork, основанной на базовом интерфейсе.

В вашей базе данных для каждой строки вы можете добавить путь к DLL TAKS (или вы можете добавить только имя сборки и сделать все библиотеки DLL для установки в предопределенном каталоге). Затем, используя отражение .NET, вы можете загрузить сборку TASK и динамически вызывать метод «DoWork», поскольку все они основаны на вашем базовом интерфейсе.

Лучше иметь код в БД, так как задачи будут предварительно скомпилированы и более безопасны. А также вам не нужно будет перестраивать основное приложение каждый раз, когда добавляется новая задача.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...