gpt4 book ai didi

c# - 将实体保存到数据库——我的 Save 方法应该返回保存的实体吗?

转载 作者:行者123 更新时间:2023-11-30 21:02:02 24 4
gpt4 key购买 nike

所以,我认为有一个不返回刚刚成功保存的实体的保存方法有点奇怪。但是,传入 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 字段将更新为数据库提供的值。

最佳答案

我会选择第一种方法,但有一个小的变化——用 ref 传递参数. (请参阅评论。)第二个问题是您不必要地创建了一个额外的变量。为什么不添加一些 <summary>第一种方法的标签,在智能感知中指示将要发生什么以澄清任何混淆?对我来说,这比创建一个额外的变量来本质上做同样的事情要好。

关于c# - 将实体保存到数据库——我的 Save 方法应该返回保存的实体吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13717572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com