Итак, у меня было довольно много строк кода для выполнения в методе main класса Application (Main) java-проекта.Чтобы избавиться от всего этого беспорядка, я в итоге реорганизовал его, используя технику рефакторинга метода extract, но затем у меня появилось много статических методов в классе Main, которые я не фанат .... Что было бы лучшеспособ получить чистый основной метод применения?Должен ли я использовать одноэлементный класс, возможно? Какие еще шаблоны / методики проектирования я должен использовать, чтобы избежать использования всех этих статических методов в моем основном классе и сохранять основной метод как можно более кратким?
Исходный код:
import controller.Statistics;
import model.primary.customer.CustomerInfo;
import model.primary.movie.MovieInfo;
import model.primary.rating.RatingInfo;
import util.FileParsing.FileParser;
import util.mapping.CustomerMapper;
import util.mapping.MovieMapper;
import util.mapping.RatingsMapper;
import view.DisplayStatistics;
import view.UserInterface;
public class Application {
public static void main(String[] args) {
Statistics statistics = processStatistics();
DisplayStatistics displayStatistics = new DisplayStatistics(statistics);
initiateUI(displayStatistics);
}
private static Statistics processStatistics() {
MovieInfo movieInfo = processMovies();
CustomerInfo customerInfo = processCustomers();
RatingInfo ratingInfo = processRatings();
return new Statistics(customerInfo, movieInfo, ratingInfo);
}
private static void initiateUI(DisplayStatistics displayStatistics) {
UserInterface userInterface = new UserInterface(displayStatistics);
userInterface.start();
}
private static RatingInfo processRatings() {
FileParser ratingsFile = new FileParser("ratings.dat", "::");
RatingsMapper ratingsMapper = new RatingsMapper(ratingsFile, 4);
return new RatingInfo(ratingsMapper.getCustomerIDMovieIDRatingAndTimeMap());
}
private static CustomerInfo processCustomers() {
FileParser customerFile = new FileParser("users.dat", "::");
CustomerMapper customerMapper = new CustomerMapper(customerFile, 5);
return new CustomerInfo(customerMapper.getIdCustomerMap());
}
private static MovieInfo processMovies() {
FileParser movieFile = new FileParser("movies.dat", "::");
MovieMapper movieMapper = new MovieMapper(movieFile, 3);
return new MovieInfo(movieMapper.getIdMovieMap());
}
}
Изменен код после использования класса Singleton (процессор):
import controller.Statistics;
import view.DisplayStatistics;
import view.UserInterface;
public class Application {
public static void main(String[] args) {
Statistics statistics = Processor.getInstance().processStatistics();
DisplayStatistics displayStatistics = new DisplayStatistics(statistics);
UserInterface userInterface = new UserInterface(displayStatistics);
userInterface.start();
}
}
Код класса Singleton (процессор):
import controller.Statistics;
import model.primary.customer.CustomerInfo;
import model.primary.movie.MovieInfo;
import model.primary.rating.RatingInfo;
import util.FileParsing.FileParser;
import util.mapping.CustomerMapper;
import util.mapping.MovieMapper;
import util.mapping.RatingsMapper;
public class Processor {
private static Processor ourInstance = new Processor();
public static Processor getInstance() {
return ourInstance;
}
private Processor() {
}
static Statistics processStatistics() {
MovieInfo movieInfo = processMovies();
CustomerInfo customerInfo = processCustomers();
RatingInfo ratingInfo = processRatings();
return new Statistics(customerInfo, movieInfo, ratingInfo);
}
private static RatingInfo processRatings() {
FileParser ratingsFile = new FileParser("ratings.dat", "::");
RatingsMapper ratingsMapper = new RatingsMapper(ratingsFile, 4);
return new RatingInfo(ratingsMapper.getCustomerIDMovieIDRatingAndTimeMap());
}
private static CustomerInfo processCustomers() {
FileParser customerFile = new FileParser("users.dat", "::");
CustomerMapper customerMapper = new CustomerMapper(customerFile, 5);
return new CustomerInfo(customerMapper.getIdCustomerMap());
}
private static MovieInfo processMovies() {
FileParser movieFile = new FileParser("movies.dat", "::");
MovieMapper movieMapper = new MovieMapper(movieFile, 3);
return new MovieInfo(movieMapper.getIdMovieMap());
}
}