快速回答
从面向对象的角度很容易想到,Design 3可能会更好,因为“数据”是一个对象,而“分析”似乎不仅仅是一个操作。
但是,在实践中,正如@Danny Varod 所说:数据的“糟糕耦合”。
在现实生活中,分析器变化很小,而数据变化很大,从面向对象的角度来看,分析器会改变数据,因此设计 1似乎更适合您的情况。
评论
我在业余时间使用编译器和解析器以及他们分析的编程语言。这种情况看起来与您的问题相似。解析器看起来像您的“数据分析器”,要解析的源代码看起来像您的“数据”。
关系示例:
................................
....+----------------------+....
....| CPPParser |....
....+----------------------+....
....| [+] CPPStream Source |....
....+----------+-----------+....
...............|................
...............|................
...............v................
....+----------+-----------+....
....| <<abstract>> |....
....| CPPStream |....
....+----------------------+....
................................
但是,由于我的“数据提供者”,在这种情况下,流可以被后代类替换,例如 FileStream、StringStream。
继承图示例:
............................................................
....+----------------------+................................
....| CPPStream |................................
....+----------------------+................................
....| [+] CPPStream Source |................................
....+----------+-----------+................................
...............^............................................
...............|............................................
...............|............................................
...............+---------------------------+................
...............|...........................|................
...............|...........................|................
...............|...........................|................
....+----------+-----------+....+----------+-------------+....
....| <<concrete>> |....| <<concrete>> |....
....| CPPFileStream |....| CPPFileStream |....
....+----------------------+....+------------------------+....
....| [+] String Filename |....| [+] String StringValue |....
....+----------------------+....+------------------------+....
............................................................
怎么样,你的场景,由一个类表示的数据可以被一个后代类替换吗?
如果是这样,设计 1似乎更适合。
干杯。