Kas*_*bbe 7 oop dependencies dependency-management
当我为我的项目构建自己的系统时,我正在学习很多关于设计模式的知识.我想问你一个我无法找到答案的设计问题.
目前我正在使用多个客户端的套接字构建一个小型聊天服务器.现在我有三个班:
我在酒店级服务器上有一个人员列表,因为现在跟踪在线有多少人会很好(不必遍历所有房间).这些人住在酒店级,因为我希望能够在不搜索房间的情况下搜索特定的人.
这是不好的设计吗?还有另一种实现方式吗?
谢谢.
我不喜欢它.酒店包含客房,房间包含人.人们不包含房间,他们属于他们.
您不一定要迭代来计算您的访客数量.您可以保持运行计数($ Hotel-> total_guests)并在其更改时进行修改.
严格来说,类之间的相互依赖问题可以通过使用接口(抽象类,如果您的语言是 C++ 或 Python)和;IRoom来IPerson解决。在伪代码中
interface IPerson
IRoom getRoom()
// etc
interface IRoom
iter<IPerson> iterPerson()
// etc
Run Code Online (Sandbox Code Playgroud)
这使得只有接口相互依赖——实际的实现只需要依赖于接口。
如果您想避免循环引用循环(例如在 CPython 中,这可能会减慢垃圾收集速度,这可能会带来麻烦),这也为您在实现方面提供了足够的回旋余地——您可以使用弱引用,这是一个具有典型“的底层关系数据库”对于第一个简单的原型,您可以使用您选择的语言中最简单的东西(可能很简单,而且必然是循环的,引用 [[pointers, in C++]] 并引用PersonaRoom和一个Room到一个list<Person>)。