我还在学习并尝试让我的代码更好,所以我决定使用Interface和泛型来改善我的CRUD代码。
到目前为止,我的数据库中的每个表都有大量的回购。现在我正试图通过使用公共存储库来减少该数量。
问题是我的一些存储库要求使用比简单SELECT更具体的搜索条件。
例如:
///<summary>
///Get handle for stanowisko where user defined that it should be used to count time of work for this machine
///</summary>
public HandleCzujnikiModel Select(string stanowisko, bool doObliczeniaCzasuPracy)
{
using (ISession session = NHibernateHelper.OpenSession())
{
return obj = session.Query<HandleCzujnikiModel>()
.Where(c => c.Stanowisko == stanowisko && c.DoObliczeniaCzasuPracy == doObliczeniaCzasuPracy).FirstOrDefault();
}
}
NHibernate将创建一个SQL。
现在我的问题是我是否在我的存储库之后创建了大量的存储库,我保留了常见的SELECT,UPDATE等...并且有更多特定操作的额外方法。
或者我是否使用简单的SELECT并稍后使用LINQ服务器端来获得我想要的结果。
我认为这两种解决方案都有其优点和缺点。
1)如果仅使用,, main“存储库,我可以大大减少类的数量。 2)但是这会导致性能下降?因为我必须从数据库中选择更多记录,所以更多使用额外代码和.Where子句使用LINQ来获得结果。
现在我的知识有限,因此我必须从StackOverflow众神寻求答案:)
干杯!
答案 0 :(得分:1)
根据经验:如果您可以对数据库进行过滤,请在那里进行过滤。
这意味着在你的情况下:如果你可以生成一个NHibernate查询,那么在NHibernate查询中进行过滤比获取所有行并在之后使用Linq过滤它们要好得多。
如果你没有很多行,或者你正在使用本地开发数据库,它似乎没什么大不了的,但如果与数据库的连接速度很慢(呃)并且你有很多行在数据库中,您将看到将所有行发送到客户端所需的性能。
我们经历过的另一件事:你的NHibernate对象越复杂(使用其他表中的字段)这个问题变得越来越糟。
如果你正在设计你的应用程序,那么你很可能会遇到n + 1问题: What is SELECT N+1?