我有一个只有main的类,它读取某些txt并执行算法。
我的班级看起来像:
class doThejob{
public static void main(String args[]){
//*****start part A******
//do the reading from text file, and tokenize it
// process into the form I need,
//about 10-30 lines of codes
//******End of part A*****
//then run the algorithms
algorithm alg=new aglorithm();
Object output = alg.x(input);
//****Part B**** output to txt, about 10~40 lines
}
}
class algorithm{
private void a(Object x){
//do something
return (Object)result;
}
}
任何人都可以告诉我应该将A部分和B部分提取到新课程中,然后将它们设置为公共方法。如下所示
class Io{
public Object readFromTxt(String path){
}
public void outputToTxt(String path){
}
}
如果我设置它们,然后像下面那样使用它,是否更多OOP?
class doThejob{
public static void main(String args[]){
Io dataProcess= new Io();
Object input = dataProcess.readFromTxt(args[0]);
algorithm alg=new aglorithm();
Object output =alg.x(input);
dataProcess.readFromTxt(args[1],output);
}
}
class algorithm{
private Object a(Object x){
//do something
}
}
答案 0 :(得分:4)
以填充方式更具可读性。
在另一个班级中将其分开是根据单一责任原则。它将有助于使代码更易读,并且以后更容易更改。
如果您想对此进行更多扩展,可以为输入和输出创建一个接口(例如:IIO)。这样,您可以在IO类中实现此接口,将其重命名为FileIO。无论何时你想创建另一种形式的IO,比如数据库访问,你只需要创建一个实现这个接口的DatabaseIO类,并在这个新类型的main方法中改变实例:
public interface IIO
{
string Read();
void Write(string text);
}
public class FileIO : IIO
{
string path;
public FileIO(string filePath)
{
path = filePath;
}
public string Read()
{
// read from file and return contents
}
public void Write(string text)
{
// write to file
}
}
public class SqlServerIO : IIO
{
SqlConnection conn;
public SqlServerIO(string connectionStringName)
{
// create the connection
}
public string Read()
{
// read from database
}
public void Write(string text)
{
// write to database
}
}
提取接口使代码更加可维护,因为它可以随时切换实现,而不会弄乱工作代码。它还有助于单元测试。