我可能继承一个有点复杂的多线程应用程序,该应用程序目前有几个带有2+k loc的文件、从任何地方访问的许多全局变量以及其他我认为很难闻的实践。
在开始使用当前模式添加新功能之前,我想看看是否可以使应用程序的基本架构更好。下面是一个简短的描述:
我有点纠结于什么不同的模式,策略,编程实践等,我应该研究,以便有知识作出最好的决定。
以下是我为自己创造的一些目标:
感谢任何关键字或其他提示,可以帮助我在这个项目。
发布于 2009-12-02 17:56:21
对于Quibblesome的优秀建议,我还可以补充说,使用不可变对象通常是降低线程问题风险的有效方法。(不可变对象,如.NET和Java中的字符串,一旦创建就不能修改。)
发布于 2009-12-01 15:55:06
我建议另一个目标是删除/减少全局状态,并尽可能频繁地将信息保存在堆栈中,以减少出现争用条件和奇怪线程问题的可能性。
如果您可以将tA2、tB2、tA3和tB3合并到相同的线程中来杀死几个线程,也许值得一看。如果这是不可能的,请考虑将它们放在facade (一个与在UI和正在与服务器对话的服务之间移动数据请求有关的线程)后面。因此,“面向用户”代码只需要处理一个客户端,而不是两个客户端。(我不把备份计算为客户端,因为这听起来像是单向过程)。
如果线程(UI和facade)等待对方完成它们的请求,那么这将防止“拉更新”与“推送更新”同时发生。
发布于 2009-12-01 16:04:11
一般来说,要进行这类更改,您需要查看Martin的重构:改进现有代码的设计 (大部分在重构网站上)和模式重构。您可能还会发现有效地使用遗产代码在支持安全更改方面很有用。这对多线程没有什么特别的帮助,除非在多线程环境中,更简单的代码更容易处理。
https://stackoverflow.com/questions/1826914
复制相似问题