我可能会继承一个有点复杂的多线程应用程序,它目前有几个带有2 + k loc的文件,从各处访问的大量全局变量以及我认为非常臭的其他实践。
在我开始使用当前模式添加新功能之前,我想尝试看看我是否可以更好地使应用程序的基本架构。这是一个简短的描述:
对于我应该研究的不同模式,策略,编程实践等方面我有点麻烦,以便掌握相关知识以做出最佳决策。
这是我为自己发明的一些目标:
感谢您提供有关此项目的任何关键字或其他提示。
答案 0 :(得分:2)
对于Quibblesome的优秀建议,我还可以补充一点,使用immutable objects通常是降低线程问题风险的有效方法。 (不可变对象,如.NET和Java中的字符串,一旦创建就无法修改。)
答案 1 :(得分:1)
我建议另一个目标是删除/减少全局状态并尽可能频繁地保留堆栈信息,以减少竞争条件和奇怪的线程问题。
也许值得一看,你是否可以将tA2,tB2,tA3和tB3合并到相同的线程中来杀死一些。如果不可能,请考虑将它们置于一个外观(一个与UI和与服务器通信的服务之间移动数据请求有关的线程)。这样“面向用户”的代码只需处理一个客户端而不是两个客户端。 (我不认为备份是一个客户端,因为这听起来像是一个单向的过程。)
如果线程(UI和Facade)等待彼此完成他们的请求,那么这应该防止在“推送更新”的同时发生“拉动更新”。
答案 2 :(得分:1)
为了进行一般性的改变,你会想看看Martin Fowler的Refactoring: Improving the Design of Existing Code(其中大部分在the refactoring website上)和Refactoring to Patterns。您还可能会发现Working Effectively with Legacy Code对支持安全更改很有用。除了更简单的代码在多线程环境中更容易处理之外,这对于多线程来说都没有那么多帮助。
答案 3 :(得分:0)