В настоящее время у меня есть 2 таблицы в моей базе данных. Питание и столы (это приложение для управления рестораном). Я создал интерфейсы репозиториев и их реализацию для обеих таблиц (авторизованный пользователь должен иметь возможность добавлять / удалять / обновлять данные о блюдах и таблицах, когда, например, в меню появляется новая еда). Проблема в том, что оба моих интерфейса имеют в основном один и тот же метод, который, как я полагаю, вызывает избыточность кода. Это мои интерфейсы:
public interface IMealsRepository
{
IEnumerable<Meal> FindAll();
Meal FindById(int id);
Meal FindByName(string mealName);
Meal AddMeal(MealDTO newMeal);
void RemoveMeal(int id);
Meal UpdateMeal(Meal meal);
}
public interface ITablesRepository
{
IEnumerable<Table> FindAll();
Table FindById(int id);
Table AddTable(Table newTable);
void RemoveTable(int id);
Table UpdateTable(Table table);
}
Я пытался создать базовый интерфейс репозитория с общими методами FindAll, FindById, Add, Remove, Update, но столкнулся с проблемой, которую я беру и возвращаю различные типы, например для метода Add я либо возвращаю объект Table или Meal в зависимости от интерфейса. Я попытался go с объектным подходом:
public interface IRepository
{
IEnumerable<object> FindAll();
object FindById(int id);
object Add(object newObject);
void Remove(int id);
object Update(object updatedObject);
}
Тогда я бы просто IMealsRepository: IRepository и ITablesRepository: IRepository и добавил дополнительные методы, уникальные для этих хранилищ, например, поиск еды по имени. Мой интерфейс питания будет выглядеть так:
public interface IMealsRepository : IRepository
{
Meal FindByName(string mealName);
}
У меня также есть Службы для тех репозиториев, которые являются единственными, которые могут получить доступ к репозиториям и возвращать эти конкретные типы объектов, используя методы репозиториев. Это хороший подход или я слишком углубляюсь в этот проект в отношении интерфейсов моих репозиториев?