#c# #oop #design-patterns
#c# #ооп #шаблоны проектирования
Вопрос:
У меня есть требование для разработки приложения CRUD. В БД есть три таблицы — сотрудники, Продажи и Клиенты. Значения для этих таблиц доступны в трех разных таблицах. Мое приложение должно периодически проверять электронную таблицу и обновлять соответствующую таблицу. Я придумал следующий дизайн
EmpMgr — EmpDAL — EmpDAO
SalesMgr — SalesDAL — SalesDAO
CustMgr — CustDAL — CustDAO
Таймер в моем основном приложении будет периодически запускать и получать электронную таблицу, доступную в настроенном местоположении, и вызывать функцию синтаксического анализа в EmpMgr, SalesMgr или CustMgr . Соответствующие классы анализируют файл и формируют «Вектор EmpDao / SalesDao / CustDao» и вызывают соответствующий DAL для обновления таблицы.
Мое опасение по поводу этого подхода
- Синтаксический анализ файла excell может повторяться во всех классах Mgr. Если я хочу создать универсальный анализатор, как мне заставить его возвращать конкретный «Вектор DAO»?
- Сегодня данные взяты из excell, возможно, они будут изменены на XML или даже веб-сервис. Как я должен убедиться, что мой дизайн будет учитывать изменения?
Комментарии:
1. Это не должно быть первым местом, на которое нужно обратить внимание, когда вы сталкиваетесь с проблемой.
Ответ №1:
Вам не хватает модели (думаю, MVC). Это должно решить обе ваши проблемы. Я не думаю, что вам понадобится слой DAL.
например, для таблицы Excel, содержащей список сотрудников. У вас должен быть конкретный класс для сотрудников. Список сотрудников может храниться в контейнере списка. Ваш DAO проанализирует Excel и превратит каждую строку в объект employee или примет объект employee и добавит его в качестве строки в Excel.
Для вашего первого вопроса ваш код может выглядеть следующим образом.
class EmployeeManager()
{
...
public void CreateEmployee(Employee employee)
{
dao.Add(employee);
}
public void CreateEmployees(List<Employee> employees)
{
dao.AddMany(employees);
}
...
public List<Employee> GetAllEmployees()
{
List<Employee> employees = dao.GetAll();
employees.Sort();
}
...
}
class Employee()
{
Employee(string name, string job)
{
Name = name;
Job = job;
}
...
string Name { get; set; }
string Job { get; set; }
}
class EmployeeDAO()
{
...
public List<Employee> GetAllEmployees()
{
List<Employee> employees = new List<Employee>;
//parse all rows and make make employee objects out of them.
return employees;
}
}
Для Q1, используя модель, вы будете использовать контейнеры, предоставляемые C #, Для хранения списка сотрудников, их можно искать, сортировать, Изменять и т. Д., А код уже сделан для вас, проверен и протестирован для вас и написан людьми намного умнее вас.
Для Q2, если вы измените из Excel в XML или что-нибудь еще, все, что вам нужно сделать, это изменить DAO. Все, что использует менеджер, нужно будет использовать только классы в вашей модели и использовать контейнеры, уже имеющиеся в C #.