У меня есть программа MineSweeper, в которой я сталкиваюсь со сценарием, похожим на.,
В чем моя проблема?
class operation{
<Data's needed for all operations>
/*(Each operation needs all the datas.)*/
public mainOperation(){ // user can call this mainOperation whenever they want to do some work.
operation_ABC();
operation_LMN();
}
private void operation_ABC(){
helper_DEF(); //This helper does partial work of ABC()
helper_IJK(); //This helper does remaining work of ABC()
}
private void DEF(){..//access and work on data..}
private void IJK(){..//access and work on data..}
private void operation_LMN(){
helper_OPQ();
< some work on data >
helper_RST();
}
private void helper_OPQ(){..//access and work on data...}
private void helper_RST(){..//access and work on data...}
}
Что мне нужно?
Что мне нужно, так это какой-то способ сгруппировать методы и уменьшить видимость helper_DEF и helper_IJK в операции_ABC. Здесь я четко назвал операцию_ или помощник_, но реальный сценарий в моей программе таков....
private void backEndActionTaker(){
<type: private void > initializeMinePlacer();
<type: private void > mineValueAssigner();
}
Проблема удобочитаемости: разработчикам, которым необходимо прочитать/расширить этот код, наверняка будет сложно разделить операцию и вспомогательную функцию, поскольку с первого взгляда все выглядит как операция.
Что у меня получилось? Я планировал создать внутренние классы без каких-либо данных, но почувствовал две неловкие вещи.
class operation_ABC{
exec_ABC(){
helper_1();
helper_2();
}
private helper_1(){......//Access outer class data...}
private helper_2() {.........}
}
- создание класса без каких-либо данных-членов.
- всякий раз, когда мне нужно вызвать эту операцию, я должен создать объект и вызвать его (методы статических внутренних классов не будут работать, потому что вспомогательные методы обращаются к данным внешнего класса.)