Полагаю, я не понимаю полного назначения интерфейсов. Поэтому я прошу совета по этому вопросу.
У меня есть несколько таблиц в моей базе данных. Немногие из них: Languages, FrontEndMenus, BackEndMenus
...
Эти таблицы имеют разные столбцы, поэтому объекты C # также имеют разные свойства (даже объекты меню FrontEnd и BackEnd имеют несколько разных полей)
Для повышения производительности они хранятся в оперативной памяти в классах SINGLETON с именем (LanguageCollection, FrontEndMenuCollection, BackEndMenuCollection
)
Прежде всего, все эти объекты имеют 3 метода: IsValid, Save и Remove.
Обычно они используются как:
LanguageItem item1 = new LanguageItem();
item1.IsValid();
item1.Save();
item1.Remove();
FrontEndMenuItem item2 = new FrontEndMenuItem();
item2.IsValid();
item2.Save();
item2.Remove();
//And Same as BackEndMenus class too..
И когда я хочу получить один из объектов в одноэлементных коллекциях, я называю их так:
FrontEndMenuItem item = GetInstance.FilterSingleOrDefault(new FrontEndMenuItemArgs{ Id = 14 });
А вот и мой вопрос:
Насколько я понимаю, для создания гибкой структуры я должен использовать реализацию интерфейса для этих классов объектов (FrontEndMenuItem, LanguageItem, BackEndMenuItem
)
Я сделал что-то вроде:
public interface IBusinessItem
{
bool IsValid();
OperationResult Remove();
OperationResult Remove(bool isCommitOnDatabase);
OperationResult Save();
OperationResult Save(bool isCommitOnDatabase);
}
Но я не уверен, как я могу это использовать ...
Не могли бы вы дать мне небольшое руководство по этому подходу? Я был бы очень рад, если бы вы могли помочь мне, написав очень простые коды.
Я добавил в качестве комментария, но так как это очень важно, я бы хотел добавить эту часть и в мой существующий вопрос:
Когда требуется обновление или вставка, сам объект обновляется по его полям и затем сохраняется. Это так:
FrontEndMenuItem item2 = new FrontEndMenuItem();
item2.Title = "Some title";
item2.ModuleId = 5;
item2.LinkTypeId = 2;
item2.Save(); //Since its a new item its gonna be saved as new that means INSERT.
Методы сохранения могут понять, является ли он новым или нет после его вызова из самого объекта, например item2.Save()
, поэтому этот метод также будет работать при вызове из интерфейса IBusinessItem
.
Но как насчет полей? В BackEndMenuItem
нет поля ModuleId
или LinkTypeId
Может ли быть IBusinessItem.ModuleId = 5
? Если это так, должен ли я использовать интерфейс, если нет, в какой ситуации я могу использовать интерфейсы для этой проблемы?
Большое спасибо,