したがって、正常に保存されたばかりのエンティティを返さない 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;
}
前にコードを見たことがない人にとっては、2 番目の関数の方がわかりやすいと思いますが、開発者が理解すれば、最初の実装の方が簡潔でわかりやすいと思います。何かご意見は?
更新:明確にするために、SaveOrUpdate にはプレイリストに副作用があります。プレイリストがデータベースに保存されると、その ID フィールドが DB から提供された値で更新されます。