0

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

}
4

1 回答 1

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

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

于 2013-02-25T15:28:21.707 回答