社区
C#
帖子详情
面向对象开发中的事务问题。非常之急。
WindowsBoy
2004-04-20 04:10:14
在论坛中找了一下,但没有找到,请各位来解决一下。
在面向对象的程序设计中一两个类A和B,A是父类,B是A的子类,A和B都有一个Add方法用来向数据库中的两个表(A和B表)添加记录。在B类的Add方法中调用Base.Add("参数列表")然后在调用数据访问层的方法向B表插入数据。因为A和B是形成一个业务实体所以必需做事务的处理。
不使用COM+和传connection参数的方法。
不知道我说明白了没有。100分不够就在加100分。
...全文
284
19
打赏
收藏
面向对象开发中的事务问题。非常之急。
在论坛中找了一下,但没有找到,请各位来解决一下。 在面向对象的程序设计中一两个类A和B,A是父类,B是A的子类,A和B都有一个Add方法用来向数据库中的两个表(A和B表)添加记录。在B类的Add方法中调用Base.Add("参数列表")然后在调用数据访问层的方法向B表插入数据。因为A和B是形成一个业务实体所以必需做事务的处理。 不使用COM+和传connection参数的方法。 不知道我说明白了没有。100分不够就在加100分。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
WindowsBoy
2004-04-23
打赏
举报
回复
我明白了brightheroes(闭关)的意思了。不过现在这个项目已经开始,没有时间试了,我还是采用最笨的方法吧。
另外如果有个类C继承B,那么你在A类中的判断if(t.ToString() == "xxxx.xxxx.B")好像就不成立了。
你从B的角度看他是一个完整的电梯对象,但它也是一个设备不是吗,所以他有父类设备(A)的全部属性。
希望继续回帖
WindowsBoy
2004-04-22
打赏
举报
回复
TO: brightheroes(闭关)
B类继承A后,B拥有A的全部属性,这样我就可以将B绑定到控件上了。
比如电梯是父类A,客用电梯是子类B,B类中有很多属性是A类的属性。这样B类就可以少做很多事了。
所以B类里的属性+A类里的属性=B业务实体
changezhong
2004-04-22
打赏
举报
回复
To brightheroes(闭关) :能不能给一个具体一点的例子
Add()
{
//开始事务
调用a.Add(事务参数);
foreach(B b in bList)
{
b.Add(事务参数);
}
//提交事务
}
brightheroes
2004-04-22
打赏
举报
回复
你可以在类A中定义一个属性SqlString
然后在A的Add里面调用这个属性就可以了
brightheroes
2004-04-22
打赏
举报
回复
换句话来说
“A和B是形成一个业务实体”
这句话我不赞同
类B继承了A,表示B是A的一个更详细的说明,并没有和A构成一个业务实体
更严格的说一点,有了B,就无需有A了
所以插入数据的时候没有必要用事务来包含A(当然B内部可以用自己的事务)
brightheroes
2004-04-22
打赏
举报
回复
我觉得,类B和A不应该是父子关系,他们反映在数据库中是主从表,反映在C#里面是两个平等的类,应该用另外的一个类C来描述他们的关系。
brightheroes
2004-04-22
打赏
举报
回复
我明白你的意思了,ok
可以如下来做,如果一定要用类B来继承A,而不是用另外一个类C来包装没有继承关系的A和B的话(我还是推荐这种做法)
--声明,以下的方法比较诡异,但是的确是一个方法;
你可以在A中做一个方法,这个方法就是Add
然后在Add方法里面通过反射来作,当然这样就略显无奈。
比如说你的类B中,有一个属性,叫做InsertSql,返回insert字符串(这个没有问题吧,甚至你这个Sql语句都可以生成,但是我们先简单的就事论事)
Add()
{
Type t = this.GetType();//通过这句话可以得到当前的类型
if(t.ToString() == "xxxx.xxxx.B")//xxxx表示你的命名空间
{
string sql = t.GetProperty("InsertSql").GetValue(null,null);
}
。。。。。。
}
大概是这么个意思,这是一个思路
调用的时候
因为你的B继承了A,所以B中也有了Add这个方法
B.Add()
就可以了
不知道你有没有明白,大概我说的不是很清楚
总之,在执行B.Add()的时候
Type t = this.GetType()得到是B
北京的雾霾天
2004-04-22
打赏
举报
回复
面向对象开发中的事务问题,真是一个不好处理的问题,要是把一个事务对象传来传去的,不是一个好的办法,又要保证类的特性,实在不行的话不把这个ADD方法做成一个在子类中重写的,让子类自己来处理这个动作.
生活真美好
2004-04-21
打赏
举报
回复
gz
WindowsBoy
2004-04-21
打赏
举报
回复
还有没有其它的办法呀!我不想用这种方法,也不想用COM+。最后如果不行只有用这个方法了,希望各位在想想办法。我在等一天,明天结帖。
CMIC
2004-04-21
打赏
举报
回复
你可以这样做,给Add方法加一个参数Add(SqlTransaction transaction)
Add方法中的SqlConnection以如下方法获得。
SqlConnection connection=transaction.Connection
你可以看一下Microsoft.ApplicationBlocks.Data,它就是这样通过事务操作数据的。
CMIC
2004-04-21
打赏
举报
回复
你可以这样做,给Add方法加一个参数Add(SqlTransaction transaction)
Add方法中的SqlConnection以如下方法获得。
SqlConnection connection=transaction.Connection
你可以看一下Microsoft.ApplicationBlocks.Data,它就是这样通过事务操作数据的。
WindowsBoy
2004-04-21
打赏
举报
回复
在UP
brightheroes
2004-04-21
打赏
举报
回复
不太明白为什么楼主不想采纳 CMIC(大象)的方法,很标准的方法呀这是
还有,我提个建议
其实那类A和B来说,并没有形成一个业务实体
建议用一个类C来描述这个实体
C中包括
private A a;//表头信息
private arrayList bList;//详细信息列表
比如说方法
Add()
{
//开始事务
调用a.Add(事务参数);
foreach(B b in bList)
{
b.Add(事务参数);
}
//提交事务
}
WindowsBoy
2004-04-21
打赏
举报
回复
自己在UP一下
WindowsBoy
2004-04-20
打赏
举报
回复
是的。而这两次不是事先知道的。因为随着系统的扩展,其子类也可能在增加。所以也不一定是两次数据访问,可能更多。
北京的雾霾天
2004-04-20
打赏
举报
回复
你的情况是用到了两次数据访问层的函数,这次操作还必需是在一个事务里面是吧?
WindowsBoy
2004-04-20
打赏
举报
回复
自己UP一下
Hexudong1979
2004-04-20
打赏
举报
回复
up
面向对象
:结构化
开发
&
面向对象
本文对比了结构化和
面向对象
两种软件
开发
方法。结构化方法强调自顶向下、逐步求精,以函数为基本单元,适合面向功能的程序设计。而
面向对象
方法以类和对象为
中
心,支持继承、封装和多态,更符合人类思维方式,具有更好的可扩展性和直观性。
面向对象
设计原则如单一职责、开闭原则等提升了软件质量。Java作为一种纯
面向对象
的语言,其程序由类组成,体现了
面向对象
的特性。
python
中
的
面向对象
(教学式讲解)
本文深入浅出地介绍了
面向对象
编程的基础知识,包括类与对象的概念、封装、继承、多态等核心特性。并通过实例演示了如何在Python
中
实现
面向对象
编程。
【新版】系统架构设计师 - 知识点 -
面向对象
开发
方法
本文详细介绍了
面向对象
开发
方法,包括
面向对象
的分析(用例模型、类图、设计原则和模式)、设计过程(用例实现、技术支撑、用户界面和精化设计),以及各种模型之间的关系如用例模型的包含、扩展和泛化,以及UML
中
的
事务
关系和类关系。
php
事务
面向对象
,php
面向对象
之
事务
脚本模式
本文详细介绍了PHP
中
的
面向对象
编程
事务
脚本模式,通过一个具体的示例展示了如何在实践
中
使用该模式来操作数据库。示例
中
定义了一个抽象基类`Base`,用于处理SQL语句,以及一个`VenueManager`类,用于管理场馆和活动预订。通过此类,可以便捷地插入数据,但灵活性受限于预定义的SQL语句。
php
事务
面向对象
,PHP
面向对象
之
事务
脚本模式(详解)
本文详细介绍了PHP
中
基于
面向对象
的
事务
脚本模式,如VenueManager类的操作数据库示例,包括添加场馆、空间和事件,以及如何确保
事务
的原子性。适合理解数据库操作的封装与复用。
C#
111,132
社区成员
642,541
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章