【发布时间】:2020-04-10 08:30:33
【问题描述】:
目前我的数据库中有 2 个表。 Meals and Tables(它是餐厅管理应用程序)。我已经为两个表创建了存储库接口及其实现(授权用户应该能够添加/删除/更新餐点和表数据,例如当菜单中出现新餐点时)。 问题是我的两个接口都有基本相同的方法,我相信这会导致代码冗余。这些是我的界面:
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 对象。我尝试使用对象方法:
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 并为这些存储库添加其他唯一方法,例如按名称搜索 Meal。我的用餐界面如下所示:
public interface IMealsRepository : IRepository
{
Meal FindByName(string mealName);
}
我还为那些存储库提供服务,它们是唯一能够访问存储库并使用存储库方法返回那些特定类型的对象的服务。这是一个好方法还是我在这个项目中关于我的存储库接口的内容太深入了?
【问题讨论】:
标签: c# interface polymorphism redundancy