Имам интерфейс "IUser" и клас "User", имплементиращ "IUser". Също така имам интерфейс за хранилището "IUserRepository".
Аз съм между тези два варианта:
public interface IUserRepository
{
List<User> getAll();
void addUser(User user);
void alterUser(User user);
void deleteUser(string ID);
bool validateLogin(string session_user, string session_pass);
User getUserByID(int ID);
User getUserByNombre(string name);
User getUserBySessionUser(string session_user);
}
и този
public interface IUserRepository
{
List<IUser> getAll();
void addUser(IUser user);
void alterUser(IUser user);
void deleteUser(string ID);
bool validateLogin(string session_user, string session_pass);
IUser getUserByID(int ID);
IUser getUserByNombre(string name);
IUser getUserBySessionUser(string session_user);
}
Ето моето объркване. Трябва ли моите методи в интерфейса на хранилището да връщат реални реализации или интерфейси? както можете да видите в моята първа опция връщам екземпляри „Потребител“. Какво трябва да върна, за да свържа свободно кода?
Но ако избера втория в моята реална реализация на потребителското хранилище, ще имам достъп само до методите и свойствата, които бях декларирал в моя IUser интерфейс.
например, ако извикам метод addUser от услуга, като му предам екземпляр на потребителски клас:
myRepositoryImplementation.addUser(UserInstance);
тогава истинското ми хранилище ще хареса това
private readonly IUser user;
public void addUser(IUser _user)
{
this.user=_user;
}
Добър валиден улов! но тогава ще имам достъп само до метода и свойствата, декларирани първоначално в интерфейса на IUser, а не до нов метод или свойство, декларирани в моя потребителски екземпляр.
също така, ако извикам метод getUserByID, ще получа екземпляр на IUser.
Така че да възобновя това
1). Това валидни подходи ли са?
2). Ако това са валидни подходи, кой трябва да използвам, за да запазя или запазя кода отделен?
3). Ако избера втория, също ако е валиден, трябва ли да декларирам в интерфейса всичко, което ще използвам по-късно? Имам предвид свойства и методи?
3). Имате ли по-добра идея?