![]() |
1
3
我会选择第一种方法。第二种方法违反了单一责任原则。我还将构造函数的输入参数声明为
|
![]() |
2
6
您不应该考虑将数据收集与算法分离,并在两者之间使用桥接解决方案吗(比如说迭代器适配器)?我只要0.02美元。 这种设计的含义是,算法负责通过适配器进行调用,根据需要读取数据。适配器隐藏集合及其任何与要解决的问题无关的特定方面。 |
![]() |
3
1
除非Scorechcksengine有理由假定读者将处于特定的状态,否则我会让它自己完成所有的工作。如果在初始化之前忘记调用read()怎么办?没有办法真正检查这一点,所以只需在SCE中进行确认即可。 |
![]() |
4
1
好吧,经过几年痛苦的基于.NET的经验,我将假设第一个场景。但是,每次我输入的时候,我都希望是第二次输入。 |
![]() |
5
1
我会让Scorechcksengine做这项工作。我的理由:
|
![]() |
6
1
我会用第一种方法。也许读卡器返回多个记录,那么您可以执行以下操作:
事实上,我过去所做的是在数据读取器周围创建一个包装类(使用诸如getInt32(name)、getString(“name”)等方法)。 这样,ScorechCicksEngine就不能访问读卡器的方法,而只能访问包装类的方法。 然后上面的示例会看起来像这样:
|
![]() |
7
1
第二种方法自然更有意义,但这取决于引擎如何对待读者:
如果第一种情况是这样的,那么我希望引擎不调用read方法,如果第二种情况是这样的,那么我假设引擎在驾驶员的座位上,并且负责调用read。 这可能指向了像前面建议的那样思考脱钩。 |
![]() |
8
1
这取决于你的分数对读者的影响。如果读卡器正在读取少量数据,那么传入该数据可能会更好:
这也可能是一个懒惰加载的集合,而您的SCE不在乎。不管怎样,我不认为SCE在访问结果之前必须调用阅读器上的任何内容。当您第一次尝试访问集合时,IDataReader应该具有内部逻辑来调用read函数,或者应该在构造函数中调用它。哪一个更好取决于你的情况。不管怎样,建议你使用一个可观察的集合! |
![]() |
A B · C#Excel自动调整列避免长文本时出错 4 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 4 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 4 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 4 月前 |