如果不尊重 SRP,命名很困难 :) 但是成员命名经常被滥用。
在你的情况下,我会做这样的事情:
无声音思考 - 持久性是为用户完成的,相关名称可以是 IUserRepository - 方法不超过 CRUD - 因为 IUserRepository 是针对用户的,所以不需要 UserSave、UserUpdate,因为它会破坏通用用法方式
魔术就在这里......只需这样做:
public interface IRepository<TYPE, KEY>{
IList<TYPE> GetAll(KEY key);
TYPE GetById(KEY key);
void Save(TYPE obj);
void Update(TYPE obj);
void Delete(Key key);
}
它困难吗 ?定制的怎么办?
public interface IUserRepository : IRepository<User, int>
{
IList<User> GetAllMyFavorites(ICriteria crit);
IList<Events> GetHistoryByUser(User user);
}
在使用 IoC 容器的代码中,您可以轻松完成
public UserController {
private _userRepository = null;
private _eventsRepository = null;
public UserController(IUserRepository userRepository,
IRepository<Events,int> eventsRepository)
// if you are doing here just CRUD use the generic signature
{
_userRepository = userRepository;
_eventsRepository = eventsRepository;
}
public MarkItAsGoldPartener(int userId){
var user = userRepository.GetById(userId);
user.PartnerType = PartnerTypes.Gold;
userRepository.Save(user); // the user in member name is useless
eventsRepository.Save(new Event(){Message = "The user" + UserId + "is golden" });
}
}
祝你好运 :)