在OOP中从文本文件中读取应该是一个独立的类方法?

时间:2013-02-25 15:05:00

标签: oop design-patterns

我有一个只有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
      }

}

1 个答案:

答案 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
    }
}

提取接口使代码更加可维护,因为它可以随时切换实现,而不会弄乱工作代码。它还有助于单元测试。