NHibernate在实际项目中的应用

2024-03-28 01:38

本文主要是介绍NHibernate在实际项目中的应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 剩余油领域模型持久化设计
OOA

通过健壮性分析图和交互图(时序图或协作图)分析用例

以C.1产量递减为例:

[一、读取用例]

 

主成功事件流 
     1、 系统要求用户提供基础数据源:产量递减基础数据

2、 用户提供产量递减基础数据

3、 系统读取产量递减基础数据,要求用户选择递减类型

4、 用户选择递减类型(指数递减、双曲递减、衰减递减)

5、 系统执行产量递减算法产生结果:产量递减结果

[二、建立设计类]

产量递减控制逻辑类:OutputDescendingControl

OutputDescendingControl


[三、运行测试]

编译OutputDescendingDemo项目,产生程序集OutputDescending.dll。用Nunit打开该程序集,运行。

 

错了!很正常。

修改测试类的预测结果改为23.7。


Assert.AreEqual( 23.7 ,(control.Calculate(dataBaseList)  as  ResultofOutputDescending).MaxOutput);


运行,通过。
 
创建与领域模型类相对应的 XML 配置文档和测试类。(可以采用 MyGeneration 自动生成代码,然后进行更改) 起动 MyGeneration ,打开项目模板 Iverson_NHibernate.csgen 。

[四、重构,添加新代码]

    对代码不合理的部分进行重构。

    我们目前完成的是对计算进行测试的代码,计算的基础数据皆采用代理数据。现在我们将其替换成实际使用的数据。在项目中添加Nhibernate引用。

F5运行,配置生成项

 

OK,产生领域模型、XML配置文档和单元测试类 

对生成的代码进行修改。XML配置文档Outputdescendingdatabase.hbm.xml

<? xml version = " 1.0 "  encoding = " utf-8 "   ?>
< hibernate - mapping xmlns = " urn:nhibernate-mapping-2.0 " >
    
< class  name = " OutputDescendingDemo.OutputDescendingDataBase,OutputDescendingDemo "  table = " OUTPUTDESCENDINGDATABASE " >


翻译一下,类OutputDescendingDemo.OutputDescendingDataBase,位于程序集OutputDescendingDemo,它对应于OUTPUTDESCENDINGDATABASE数据表

< id name = " ID "  column = " id "  type = " String " >
            
< generator  class = " uuid.hex " />
</ id >

唯一值,Nhibernate的要求。<generator class="uuid.hex"/>表示生成唯一值的方式是uuid.hex

< property column = " WELLID "  type = " String "  name = " WellID "  not - null = " true "  length = " 100 "   />
< property column = " YEAR "  type = " Single "  name = " Year "  not - null = " true "   />
< property column = " RESULTOFOUTPUT "  type = " Single "  name = " ResultofOutput "  not - null = " true "   />

属性对应的列名,以及类型

</ class >
</ hibernate - mapping >

更改原OutputDescendingDataBase.cs 文件,添加ID字段。对应于Nhibernate的唯一值。或应用自动生成的Outputdescendingdatabase.cs文件替换原文件。替换掉产量递减测试类OutputDescendingFixture中CalculateTest的原有代码。

XML配置文档Outputdescendingdatabase.hbm.xml添加到当前项目中,  设定XML配置文档为嵌入资源

 

在项目的生成目录下创建以程序集为名称的Config文档OutputDescending.dll.config

<? xml version = " 1.0 "  encoding = " utf-8 "   ?>
< configuration >
< configSections >
< section name = " nhibernate "  type = " System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089 "   />
< section name = " log4net "  type = " log4net.Config.Log4NetConfigurationSectionHandler,log4net "   />
</ configSections >

< nhibernate >
< add
key
= " hibernate.connection.driver_class "
value
= " NHibernate.Driver.OleDbDriver "   />
< add
key
= " hibernate.dialect "
value
= " NHibernate.Dialect.Oracle9Dialect "   />
< add
key
= " hibernate.connection.provider "
value
= " NHibernate.Connection.DriverConnectionProvider "   />
< add
key
= " hibernate.connection.connection_string "
value
= " Provider=MSDAORA.1;user id=ROS;data source=ROSA;password=ROSP "   />
</ nhibernate >
< log4net >
< appender name = " rollingFile "  type = " log4net.Appender.RollingFileAppender,log4net "   >

< param name = " File "  value = " log.txt "   />
< param name = " AppendToFile "  value = " true "   />
< param name = " RollingStyle "  value = " Date "   />
< param name = " DatePattern "  value = " yyyy.MM.dd "   />
< param name = " StaticLogFileName "  value = " true "   />

< layout type = " log4net.Layout.PatternLayout,log4net " >
< param name = " ConversionPattern "  value = " %d [%t] %-5p %c [%x] &lt;%X{auth}&gt; - %m%n "   />
</ layout >
</ appender >
<!--  Setup the root category, add the appenders and  set  the  default  priority  -->
< root >
< priority value = " ALL "   />
< appender - ref   ref = " rollingFile "   />
</ root >
</ log4net >
</ configuration >


更改帐号和数据源,使其适应你的应用程序

 

6、 用户要求系统保存产量递减结果

7、系统保存产量递减结果


[二、绘制健壮性分析图]

绘制健壮性分析图的目的是为了寻找分析类,在用例文本和图形之间寻找一种对应关系,在寻找对应关系的同时,会对需求的整理进行一次正确性和完整性的检查,如果发现问题,重新回到需求进行整理。必要时发起讨论。

[三、绘制交互图]

时序图:

协作图:

根据用例文本绘制时序图,在此注意事件流的顺序。将这种时序性和对象之间寻找关系,转换为协作图。绘制交互图的过程尽可能的不要考虑类的设计,重点关注对象在需求中的交互。将对象中的关系简单的抽象为分析类的职责。如下图所示:

考虑项目组目前的实施。注意与项目组其它成员的合作情况。在需要与其它人进行合作时,安排好自己的迭代计划,在每日开始前的五分钟会议与项目组人员计划当日结对情况。同时对分析类进行简单的设计。比如:

数据源访问接口可以采用Nhibernate完成,而系统的界面部分可以暂时用原型代替。这样我们只需要关心产量递减控制逻辑、产量递减基础数据和产量递减结果。

快速实现初探代码

[一、建立单元测试类]

由以上用例分析可知,我们需要对产量递减基础数据进行计算,然后产生产量递减结果。因此,我们需要对产量递减控制逻辑的计算进行测试。

添加单元测试类

添加单元测试库引用

添加测试代码:OutputDescendingFixture

OutputDescendingFixture

这篇关于NHibernate在实际项目中的应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/854068

相关文章

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

IDEA运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

C语言小项目实战之通讯录功能

《C语言小项目实战之通讯录功能》:本文主要介绍如何设计和实现一个简单的通讯录管理系统,包括联系人信息的存储、增加、删除、查找、修改和排序等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录功能介绍:添加联系人模块显示联系人模块删除联系人模块查找联系人模块修改联系人模块排序联系人模块源代码如下

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机