这是一个设计问题。我正在尝试在两种实现之间做出决定。
为了正确解释这一点,我需要一个例子。因此,为了举例:
我有一个类可以生成关于特定日期的某些股票市场价值的报告。我创建一个StockMarketReportGenerator
对象,将今天的日期传递给它,它会根据今天的市场价值生成一份报告。
“StockMarketReportGenerator
有一个”StockMarketData
对象。该对象的StockMarketData
目的是包含存储在数据库中的表(可能称为 StockMarket :))中的所有股票市场值,以及从表数据计算的一些进一步的值。它具有与数据库连接、检索数据、进行必要计算并将最终值存储在对象的成员变量中的私有方法。(然后它具有公开这些值的 getter 方法,但没有 setter 方法。)StockMarketData
该类基本上是股票市场数据值的“持有者”。我有一个名为“calculateStockMarketData()
" 调用所有这些私有辅助方法并设置对象。(我知道所有这些处理都可以通过 Hibernate 等框架更轻松地处理;但决定手动进行,因为它非常小,有点临时项目,不值得设置。)
我的问题是——在我的ReportGenerator
课堂上,我只需要该StockMarketData
对象即可访问它的属性/成员变量——后处理和后计算。这意味着真的,我想让对象预先填充数据。所以我保持calculateStockMarketData
方法私有,并从StockMarketData
构造函数中自动调用它。但是我对在构造函数中完成所有处理然后没有任何公共方法感到有些不安。这是设计缺陷吗?或者这真的是最合乎逻辑的方式吗?基本上,以下两种实现中哪一种更好?
1)(我当前的实现)将中心calculateStockMarketData()
方法设为私有并从StockMarketData
方法构造函数中调用它(传递今天的日期),这样每当你有一个StockMarketData
对象时,它就已经被填充了。所以ReportGenerator
在我开始使用对象属性之前,我需要的只是这行:
StockMarketData myData = new StockMarketData(someDate);
2) 将中心calculateStockMarketData()
方法公开,以便设置StockMarketData
对象需要显式调用该方法。所以从ReportGenerator
课堂上我会编码:
StockMarketData myData = new StockMarketData(someDate);
myData.calculateStockMarketData();
第一个给我的印象是更好的设计,特别是因为在初始化之前不可能使用对象属性。但我也不确定关于从构造函数执行大量代码的标准......我应该选择哪个?