首页 新闻 赞助 找找看

C# 项目模块化出现的循环引用的问题

0
悬赏园豆:5 [已解决问题] 解决于 2020-06-29 10:06

这里有个Windows窗口项目,现在要把他按照模块给划分成项目。

目前划分了4层

界面
||
||
逻辑处理
||
||
模型层

服务端

每一层都是一个项目
现在分离之后,界面 要引用 逻辑处理 这一层实现界面上的功能,但是 逻辑处理要使用界面上的某些组件,比如PictureBox,或者某个窗口,这样就出现了循环引用的情况,但是并不能进行循环引用。

在逻辑处理这块,引用的界面上的组件,在逻辑处理里都是静态的

echo_lovely的主页 echo_lovely | 小虾三级 | 园豆:1422
提问于:2020-06-29 08:32
< >
分享
最佳答案
0

“逻辑处理要使用界面上的某些组件”,此路不通,请绕道而行,我不知道你为什么说逻辑层和UI层分不开,你可能需要再都加一层,参考MVVM模型,再加一层viewMode层吧

收获园豆:5
会长 | 专家六级 |园豆:12401 | 2020-06-29 09:07

界面 要引用 逻辑处理 这一层实现界面上的功能,但是 逻辑处理要使用界面上的某些组件去获取数据

这个问题能够解决的话,那就可以解决了

echo_lovely | 园豆:1422 (小虾三级) | 2020-06-29 09:11

@小草上飞飞: "逻辑处理要使用界面上的某些组件去获取数据",组件的数据不可以通过参数传递给逻辑层吗?

Class UI
{ 
     Business b = new Business();
     this.TextBox.Value = b.Deal(this.PicBox.Value);
}
会长 | 园豆:12401 (专家六级) | 2020-06-29 09:13

@会长: 结果可行,引用了了一大堆界面上的组件,还是public static 的,结果发现,大部分没有使用,还有一小部分,通过传参解决吧

echo_lovely | 园豆:1422 (小虾三级) | 2020-06-29 09:28

@小草上飞飞: 赞

会长 | 园豆:12401 (专家六级) | 2020-06-29 09:49

@会长: 主要是原来代码中直接引用的是一个个窗体类,而不是一个个组件,我也没细看引用了多少,吓得我不要不要的,结果就只引用了一两次,那我传参就好了

echo_lovely | 园豆:1422 (小虾三级) | 2020-06-29 09:51

@小草上飞飞: 不错,听起来你在重构来代码呀

会长 | 园豆:12401 (专家六级) | 2020-06-29 09:53

@会长: 是的,我们组长要我把代码按照人家写的框架重构下

echo_lovely | 园豆:1422 (小虾三级) | 2020-06-29 09:57

@会长: C# 这块刚入门两三个月,笨的一批,啥都不是很明白

echo_lovely | 园豆:1422 (小虾三级) | 2020-06-29 09:58

@小草上飞飞: 别担心,C#好学,项目结构啥的和语言关系也不大

会长 | 园豆:12401 (专家六级) | 2020-06-29 09:59
其他回答(3)
0

“逻辑处理要使用界面上的某些组件”,此路不通,请绕道而行。

dudu | 园豆:31075 (高人七级) | 2020-06-29 08:36
0

恭喜楼主思考到架构了,逻辑上需要使用界面的话,就反射处理,把他们精简化,做成控件。
可以参考下这篇文章
https://www.cnblogs.com/kiba/p/9753893.html

kiba518 | 园豆:189 (初学一级) | 2020-06-29 08:41
0

想办法让逻辑处理别引用界面。

爱编程的大叔 | 园豆:30839 (高人七级) | 2020-06-29 08:53

问题就是这个,因为逻辑要获取picbox的视频流进行处理,这两个东西分不开啊

支持(0) 反对(0) echo_lovely | 园豆:1422 (小虾三级) | 2020-06-29 08:59

@小草上飞飞:
要不然怎么说让你想办法呢。

实在没办法了,你就使用面向接口的编程,全部IOC,去耦合。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2020-06-29 09:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册