所以,我认为有一个不返回刚刚成功保存的实体的 Save 方法有点奇怪。但是,传递给 Save 的实体会被函数修改。
例子:
//T SaveOrUpdate(T entity); from IDao
PlaylistDao.SaveOrUpdate(playlist);
该函数获取一个播放列表,将其保存到数据库中,然后返回保存的播放列表。但是,传递给 SaveOrUpdate 的参数是引用等于它的返回值。
考虑到这一点,这是一个更清晰的实现:
public void SavePlaylist(Playlist playlist)
{
try
{
NHibernateSessionManager.Instance.BeginTransaction();
PlaylistDao.SaveOrUpdate(playlist);
NHibernateSessionManager.Instance.CommitTransaction();
}
catch (Exception exception)
{
Logger.Error(exception);
throw;
}
}
对比
public Playlist SavePlaylist(Playlist playlist)
{
Playlist savedPlayist;
try
{
NHibernateSessionManager.Instance.BeginTransaction();
savedPlayist = PlaylistDao.SaveOrUpdate(playlist);
NHibernateSessionManager.Instance.CommitTransaction();
}
catch (Exception exception)
{
Logger.Error(exception);
throw;
}
return savedPlayist;
}
我认为第二个功能对于以前没有看过代码的人来说更清楚,但是一旦开发人员理解,第一个实现会更简洁明了。有什么想法吗?
更新:需要明确的是,SaveOrUpdate 对播放列表有副作用。当播放列表保存到数据库时,其 ID 字段将更新为数据库提供的值。