我正在阅读一些文本文件来创建对象。哪个类应根据OOP原则处理文本文件?
我的GUI对象有一个绘制表格并用数据填充的方法。此数据可以从HTML页面解析,也可以从缓存的文本文件中读取。我可以想到两种方法来解决这个问题,我想知道哪一种更好。
选项1:
public void drawSchedule()
{
try
{
if (CacheManager.hasData("schedule")) //this is not the complete logic, but enough for this post
{
String cacheString = CacheManager.readData(this, "schedule");
Schedule schedule = new Schedule(cacheString);
}
else
{
//read data from HTML page
}
catch (IOException e)
{
//generic error handling
e.printStackTrace();
}
}
选项2:
public void drawSchedule()
{
try
{
if (CacheManager.hasData("schedule")) //this is not the complete logic, but enough for this post
{
String cacheString = CacheManager.readData(this, "schedule");
//parse data here so we end up with a bunch of variables
//courseList would be an ArrayList of Courses, if it makes any difference
Schedule schedule = new Schedule(firstDay, courseList);
}
else
{
//Read data from HTML page
}
catch (IOException e)
{
//generic error handling
e.printStackTrace();
}
}
答案 0 :(得分:2)
老实说,这两种方法都是有效的,它将在很大程度上取决于数据的性质以及对象的使用方式。事实上,将这个问题标记为主要是以意见为基础几乎是诱人的!
如果解析非常特定于这些文本文件,并且如果Schedule
正在其他许多地方使用,那么解析代码最好不要分开。
另一方面,如果解析在几个地方有用,那么将它放在Schedule
中是有意义的。想想不要重复自己和封装。您希望代码在任何有用的地方都可见,而不是在其他地方可见,并且您只想让代码一次。
Java库中的示例包括Date
类,它有一些通用构造函数,但是有DateFormat
类能够完成处理{{1}的所有工作来自Date
。
答案 1 :(得分:1)
我投票支持选项1。
Schedule
应该知道如何从String
或HTML页面创建自己。这些逻辑都不应该在drawSchedule
中,正如人们可能猜测的那样,它的工作应该是绘制Schedule
。您希望将构建Schedule
的问题与绘制它分开。
由于这不会太难,你也可以这样做。但是要小心过早地过于优雅。正如鲍勃·马丁在Agile Software Development, Principles, Patterns, and Practices中建议“夺取第一颗子弹”而内森·马兹建议用“suffering-oriented programming”,尽量不要那么“快”。让一切顺利;然后重构一个更优雅的方法,只有当不这样做的痛苦使它值得。