首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

NHibernate - 使用抽象基础来提供功能而不是接口是否可以?

当然可以!使用抽象基础来提供功能而不是接口是一种常见的面向对象编程(OOP)设计原则。这种设计原则可以确保代码更加模块化、可维护、易于扩展和复用。

对于NHibernate这样的ORM框架来说,抽象基础可以帮助开发者灵活地构建和扩展应用程序。使用抽象基础可以有效地将业务逻辑与数据库交互分离,使得代码更具有可读性和可维护性。同时,NHibernate还提供了许多映射配置选项,使得开发者可以灵活地定义对象与数据库之间的关系,从而更好地满足业务需求。

因此,使用抽象基础来提供功能而不是接口是NHibernate的一种很好的设计选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

DotNetNuke初试水之结合NHibernate开发和导入一个Module

Starter Kits 是一个所有源代码开放的示例应用程序,它演示如何通过它实现特殊 的复杂的软件功能.这个工具包非常简单,但却非常完善,并且推崇和吸引程序员们在它的基础之上开发软件项目....这套系统在原来IBS基础上,增 加了大量的多样的更加先进的元素,其中包括了它可以在单套程序,单个数据库上上架设多个门户站点....代码重构 生成Nhibernate实体类和Xml文件可以使用CodeSmith或是MyGeneration 应用Nhibernate封装好的NHibernate.Repository类库(在...Nhibernate实践中有)包括Session管理和CRUD抽象操作。...小结 使用DNN开发web应用程序的优势在于再它的框架下开发必须与最小模块开发不是Page,所以在很大程度上提高了组件的复用性,灵活性,提高开发效率,规范程序员的代码结构,提高后续的代码的可维护性

1.6K20

NHibernate实践与模式

当然还有很多NHibernate的开发框架大家可以在www.codeproject.com,www.codeplex.com上找到。...当然也可以反过来。先把业务实体抽象出来,包括需要实现的功能,操作,返回的信息,通过对业务实体。...这个模 块他提供可以方便实现1-n,n-1,n-n的mapping非常方便使用 2.在项目中加载这些创建好的文件建议加载到一个新的项目比如BusinessModule。...定义CRUD的接口使用了一个范性,实现这个接口的是我定义的两个IApplicationRepository,ISiteRepository两个接口,这两个只对IRepository的范性作了实现....另外如果需要对业务逻辑的抽象操作在这里扩展它的方法。     开发一个AbstractRepository实现IRepository这个接口的CRUD操作。

79240

LINQ在开发中的地位?

作为底层框架,可以为ORM实现提供更强大的基础平台。在Linq之前在.net领域最流行的框架就是Nhibernate。是不是在LINQ之后Nhibernate就要消失呢?答案自然是否定的。...Nhibernate可以直接将关系数据映射为领域模型,这是DLINQ的主要问题。 DLINQ不支持继承类的映射。 Nhibernate已经提供了许多帮助进行领域面向对象建模的特征。...DLINQ目前还无法拥有。 LINQ + NHibernate的好处则是: 类型安全的查询,并且能使用智能提示功能!这样可以不用学习HQL了。 能获得所有NHibernate所拥有的能力。...假如你已经从数据库中查询出了一个数据集,那么可以使用LINQ进行过滤,排序和分页操作。...LINQ没有提供在多层应用程序中应用的功能,这一个功能可以通过序列化Expression Tree 解决,Expression Tree 就可以通过Remoting或者WCF发布出去,正好有一个开源项目解决这个问题

1.4K60

系统架构师-基础到企业应用架构-分层

同时原来的ThreeArchitecture.BLL 调用的不是直接调用数据库访问层实现,而是调用数据访问层接口。不依赖于具体的实现,而是依赖接口,这样可以实现解耦,提供了很强的扩展性。...可以采用开源的相关组件,实现解耦及隔离,例如 数据访问层可以采用Nhibernate或Entityframework实现,关于Nhibernate的文章,园子里面已经有很多的文章介绍了,我就不介绍了...3层架构模式中,存在一个缺陷,如果我们构建的软件或系统支持分布式或者需要对外提供服务的时候,这个场景就无法满足了,所以这个时候服务层就出现了,就是在BLL层的基础上进行包装,包装成可以对外提供调用的分布式服务...2、Presenter并不是与具体的View耦合,而是和一个抽象的View Interface耦合,View Interface相当于一个契约,抽象出了对应View应实现的方法。...一般来说实际的项目中会采用以下的模式做,不是直接采用传统的MVVM模式,而是结合MVP或MVC模式做。 ?

1.3K20

系统架构师-基础到企业应用架构-分层

同时原来的ThreeArchitecture.BLL 调用的不是直接调用数据库访问层实现,而是调用数据访问层接口。不依赖于具体的实现,而是依赖接口,这样可以实现解耦,提供了很强的扩展性。...可以采用开源的相关组件,实现解耦及隔离,例如 数据访问层可以采用Nhibernate或Entityframework实现,关于Nhibernate的文章,园子里面已经有很多的文章介绍了,我就不介绍了...3层架构模式中,存在一个缺陷,如果我们构建的软件或系统支持分布式或者需要对外提供服务的时候,这个场景就无法满足了,所以这个时候服务层就出现了,就是在BLL层的基础上进行包装,包装成可以对外提供调用的分布式服务...2、Presenter并不是与具体的View耦合,而是和一个抽象的View Interface耦合,View Interface相当于一个契约,抽象出了对应View应实现的方法。...一般来说实际的项目中会采用以下的模式做,不是直接采用传统的MVVM模式,而是结合MVP或MVC模式做。 ?

95950

C# 数据操作系列 - 11 NHibernate 配置和结构介绍

前言 今天是NHibernate的第二篇内容,通过上一篇的内容,我们初步了解了NHibernate的创建和使用。这一篇,我继续探索NHibernate背后的秘密。嗯,就是这样。 1....是一个提供ISession的工厂类,同时也是一个 IConnectionProvider的客户端。可以设置一个在事务之间的进程级或集群级的二级缓存。...只要ISession关闭了,这些对象就可以被分离出来然后可以在应用层的任意地方使用。...表示一个单线程、短生命周期的对象,被应用程序用来限制一个原子的工作单元,基于ADO.NET 的Transaction的抽象。...IDriver -NHibernate.Driver.IDriver: 可选的,驱动接口,用来封装隐藏不同ADO.NET 数据提供程序之间的不同。例如:参数化等。

1.1K20

NET中小型企业项目开发框架系列(一个)

我们的底层开发平台是sprint.NET+NHibernate+MVC+WCF+EasyUI方式开发,顺便加点Spring.net注入的部分,当然我们最基本的关于权限设计、业务设计,架构。...数据訪问层,页面层,数据模型层以及一个公共类的部分,每层我们在这个基础抽象了相应的接口,这样上一层仅仅须要对下一层,面向接口编程。同一时候有Spring.NET管理层之间的关系。...这里主要是: 业务逻辑层: ICMSBLL:业务逻辑层接口 CMSBLL:业务逻辑层实现 抽象的数据底层封装(泛型) ICommonSupportDAL:对公共的方法的抽象 CommonSupportDAL...,大家可能觉得没什么必要,可是,这个接口很重要,这个接口保证了我们用Nhibernate一个抽象类实现增删改查的同一时候又添加了子类的自身扩展性....一个是ICaseAssignEntityRepository自己的业务逻辑接口(实现了子类的拓展,比方在某个类中想要加入这个类特有的方法。仅仅须要在自己的接口中填写就可以)。

51710

框架和类库的区别

比如,本书中提到的通信框架只适用于需要在TCP/UDP基础上直接构建通信的应用程序,像正则表达式这样的类库却可以使用在各种不同的应用中。...大多数时候,这不是一个问题,但是如果因为框架的限制严重影响了我们系统目标的实现的时候,我们就需要考虑是否应该放弃这个框架,或者换一个其它的同类型的框架。...框架越俎代庖,也许会使得某一个具体应用的开发变得简单,却会给其它更多想使用该框架的应用增加了本没有必要的束缚和负担。 (2)使用接口,保证框架提供的所有重要实现都是可以被替换的。...框架终究不是应用,所以框架无法考虑所有应用的具体情况,保证所有重要的组件的实现都是可以被替换的,这一点非常重要,它使得应用可以根据当前的实际情况替换掉框架提供的部分组件的默认实现。...使用Proxy实现的AOP框架通常要求那些需要使用AOP截获功能的类必须继承自ContexBoundObject;采用动态代理实现的AOP框架则没有任何如此侵入性的要求,我们仍可以以最普通的方式编写应用逻辑类

1.5K31

架构之路(六):把框架拉出来

所以,我们是不是可以首先把“改”独立出来?通过不断的演化,我最后形成了一个Entity的project,负责且仅负责对象状态的改变,完全不涉及对象的加载存储等功能。...我们“增”和“删”直接利用了NHibernate的session机制,只是把“查(select)”给单独抽象了出来,也单独的抽象成一个名为Query的project。...所以我们抽象了一个ServiceInterface,前台和后台开发人员可以先确立一系列的接口,然后各自去完成自己的实现。...这其实就有一点“面向接口”的意思,前台后台都依赖于ServiceInterface的接口不管其具体的实现。 // 从这里我们就可以看出来,复杂的架构是一种无奈的选择。...你肯定可以通过各种手段做 到,最简单的就是使用ViewBag。混合ViewBag和Enitty,几乎可以解决所有问题,但有时候太丑陋了! 最后,我们其实应该跳出来,从架构的角度思考这个问题。

55890

盘点 .NET 比较流行的开源的ORM框架

查询接口类似于 LINQ。您可以使用 Chloe.ORM 通过 lambda 查询 LINQ 之类的数据并执行任何操作(查询 | 组查询 | 聚合查询 | 插入 | 批量更新 | 批量删除)。...EF提供变更跟踪、唯一性约束、惰性加载、查询事物等。 开发人员使用Linq语言,对数据库操作如同操作object对象一样省事。 EF有三种使用场景: 1、从数据库生成Class。...它被积极开发,功能齐全,并在数千个成功的项目中使用。...在架构上,它比 Dapper、Massive 或 PetaPoco 等微 ORM 高出一步,因为您使用 LINQ 表达式不是魔术字符串,同时在代码和数据库之间维护一个薄抽象层。...通过使用 DynamicMethod 生成消除 Linq 和快速属性分配获得出色的性能。 查询语言是好的 ole SQL。 包括一个低摩擦的 SQL 构建器类,使编写内联 SQL变得更加容易。

3.9K41

C# 数据操作系列 - 12 NHibernate的增删改查

之前提到NHibernate继承了Hibernate的一些传统:使用XML文件进行配置,这一点也是备受争议。...当然,NHibernate本身也提供NHibernate.Mapping.ByCode模式。不过这一篇暂且略过,留待下文。 1....(7) /> schema: 数据库schema的名称 default-cascade:可选项,默认是none,一种默认的级联风格 auto-import:明确是否可以在查询中使用非限定类名...,默认情况从Property 中读取 default-lazy:可选的,默认是true,是否启动延迟加载 1.2 class的配置 一般情况下,class节点只需要指定name和table就可以了。...总结 嗯,NHibernate基础使用篇到这里可以暂告一段落了。后续的内容有机会再深挖,当然并不代表EF Core就没有了。嗯嗯,没毛病。下一篇就让我先替大伙看看SugarSQL是什么情况吧。

1.1K20

2022年了有哪些值得推荐的.NET ORM框架?

查询接口类似于 LINQ。您可以使用 Chloe.ORM 通过 lambda 查询 LINQ 之类的数据并执行任何操作(加入查询 | 组查询 | 聚合查询 | 插入 | 批量更新 | 批量删除)。...它被积极开发,功能齐全,并在数千个成功的项目中使用。...SmartSql 借鉴了 MyBatis 的思想,使用 XML 管理 SQL ,并且提供了若干个筛选器标签消除代码层面的各种 if/else 的判断分支。...与SubSonic一样,它支持使用 T4 模板生成 poco 类(仅限 V5)。 与Massive一样,它以单个文件的形式提供,您可以轻松地将其添加到任何项目或编译(仅限 V5)。...在架构上,它比 Dapper、Massive 或 PetaPoco 等微 ORM 高出一步,因为您使用 LINQ 表达式,不是魔术字符串,同时在代码和数据库之间维护一个薄抽象层。

5.7K11

如何使用Fluent Nhibernate中的Automapping进行OR Mapping映射

由于在项目中使用NHibernate来作为ORMapping构建数据访问层,那么就必须要配置Object和DataTable的映射。...,我们使用了Fluent NHibernate的Mapping方式代替XML配置。...使用Fluent NHibernate的最大好处是降低了出错的机会,因为Fluent Nhibernate的配置是使用C#编写,可以智能感知,而且还能编译,不像原始的XML配置,写错了都不知道。...比如我们可以定义如下的规则: 类名和字段名采用每个单词首字母大写的方式数据库表名和列名使用全部大写,单词之间下划线分割的方式。...(比如Course和Student是多对多关系,那么产生的中间表表名为COURSE_STUDENT) 对于枚举,在数据库中使用tinyint也就是一个Byte存储,枚举在Automapping中作为UserType

1.1K10

2022年了有哪些值得推荐的.NET ORM框架?

查询接口类似于 LINQ。您可以使用 Chloe.ORM 通过 lambda 查询 LINQ 之类的数据并执行任何操作(加入查询 | 组查询 | 聚合查询 | 插入 | 批量更新 | 批量删除)。...它被积极开发,功能齐全,并在数千个成功的项目中使用。...SmartSql 借鉴了 MyBatis 的思想,使用 XML 管理 SQL ,并且提供了若干个筛选器标签消除代码层面的各种 if/else 的判断分支。...与SubSonic一样,它支持使用 T4 模板生成 poco 类(仅限 V5)。 与Massive一样,它以单个文件的形式提供,您可以轻松地将其添加到任何项目或编译(仅限 V5)。...在架构上,它比 Dapper、Massive 或 PetaPoco 等微 ORM 高出一步,因为您使用 LINQ 表达式,不是魔术字符串,同时在代码和数据库之间维护一个薄抽象层。

3.8K20

C#——Nhibernate探索

C#—Nhibernate探索 本篇文章,让我们一起探索Nhibernate。 首先我们去搜索Nhibernate下载地址,如下链接所示。 该版本可能是最新版,我下载的4.0.4.GA。...虽然感觉,这俩文件好像不是这么用的,但由于可以判断它们并不影响程序运行,所以,先且不管他们,等程序运行起来后,再删除他们试试。 再之后,我上网调查了下Nhibernate的应用。...,是否可以正常运行。...最后,nhibernate-configuration-2.2这句话我想了很久要不要改成4.0。 结果是我没改,测试一切正常。可以顺利使用。  ...我描述了自身一步一步配置Nhibernate的路径,我觉得还算高效,大家也可以效仿,用来学习陌生框架。 当然不必太追求速度,因为每个人的基础不一样。我比较熟悉Entity Framework。

47130

c# 常用框架整理

提供了标准的DOM API 和XPath 导航--即使 HTML 不是适当的格式!HTML Agility Pack 搭配 ScrapySharp,彻底解除Html解析的痛苦。...该项目使用纯 C# 开发,易于扩展和集成到已有的项目。只要你的已有系统是使用.NET开发的,你都能够使用 SuperSocket轻易的开发出你需要的Socket应用程序集成到你的现有系统之中。...它提供了巨大的灵活性不牺牲简单性。你能够用它为执行一个作业 创建简单的或复杂的调度。它有很多特征,如:数据库支持,集群,插件,支持cron-like表达式等等。...它使用相同的绘制程序创建 PDF 文档,在屏幕上显示,以及输出到打印机。可以修改、合并、拆分已经存在的 PDF 文件,支持透明图像。...Ubik Ubik是C# 2.0下的ORM持久层框架,当前是WinForms应用程序开发提供的.它支持OPath的子集可以进行面向对象查询,且包含一个网络事件系统.

4.7K10

NHibernate介绍「建议收藏」

现代化大型项目通常使用独立的数据库存储数据,其中以采用关系型数据库居多。...NHibernate.dll(基础类库,与数据库直接打交道,位于数据访问层) Iesi.Collections(基础类库辅助类库,位于数据访问层) Antlr3.Runtime(基础类库辅助类库,位于数据访问层...创建数据模型 NHibernate允许直接使用Plain Old CLR Objects (POCOs),不用通过存储过程直接和数据库交互。使用POCOs的一个优势在于不用绑定特定的持久化层。...创建NHibernate映射文件 Nhibernate使用XML映射文件映射POCO到数据库对象。虽然在很多案例中这可能是一对一关系,但这并不是必定的。...在本例中,我们使用Id这个字段。 generator元素告诉NHibernate怎样给新实体创建唯一ID。 property标签是见得最多的标签。它简单地映射一个到数据表或者视图中对应字段的映射。

60820

Fluent NHibernate之旅

,数据库类型和数据库的配置,还有一些NHibernate所需的配置,这里的proxyfactory.factory_class是2.1新加入的,至于用处还不是很了解,大家可以看下李大哥的“NHibernate2.1...因为Fluent是基于NHibernate的,它只实现了NHibernate的Mapping功能,其他功能还不能代替,所以我们的项目中要同时引入NHibernate和FluentNHibernate两个类库...当然不,Fluent的开发者不仅帮你保留了原有的方式,还可以混合你的配置文件,最有意思的时,你还可以使用学习NHibernate,甚至可以使用开发你自己的自动代码生成工具,因为我也刚学,先介绍一些简单的...使用NHibernate的配置      也就是你可以按照原先的方式进行配置,读取呢使用Fluent读取,然后创建SessionFactory,或许你感觉这不是多余了嘛,那是因为还没有讲到Mapping...文章写得很烂,也当是笔记吧,NHibernate也是刚刚学,惭愧惭愧,学的不是很彻底,今后也会结合NHibernate的学习一起来说。

1K60

NHibernate VS IbatisNet

NHibernate对数据库结构提供了较为完整的封装,NHibernate的O/R Mapping实现了PO 和数据库表之间的映射,以及SQL 的自动生成和执行。...程序员往往只需定义好了PO 到数据库表的映射关系,即可通过NHibernate提供的方法完成持久层操作。...程序员甚至不需要对SQL 的熟练掌握,NHibernate 会根据制定的存储逻辑,自动生成对应的SQL 并调用ADO.NET接口加以执行。 ...使用IbatisNet提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的DotNet对象,这一层与通过NHibernate实现ORM 而言基本一致,而对于具体的数据操作,NHibernate会自动生成...IbatisNet 需要手写 sql 语句,也可以生成一部分, NHibernate 则基本上可以自动生成,偶尔会写一些 Hql 。

71570
领券