GOOGLE ADS

jueves, 28 de abril de 2022

Quiero que una clase A use un método de clase B, y quiero que la clase B use un método de clase A

Estoy haciendo un pequeño proyecto para la escuela donde trato de hacer un programa de hoja de cálculo, y tengo dos clases, lo simplificaré un poco con pseudocódigo para que no sea demasiado complicado.

class DocumentController {
Document doc //This is a class with a CRUD on a document (It haves Sheets and every Sheet haves a Table full of Cells)
Parser p
getValueOfCell (sheetName, positionX, positionY) {
returns value of a cell in a sheet in the position x,y
}

setCell (String expression, sheetName, positionX, positionY) {
//Somewhere here we need to use p.evaluate()
}

}
class Parser {
DocumentController docController;
evaluate (expression: String) {
//Somewhere here, I need to use method getCell from Document for evaluating the expression (The expressions have references to other cells so the Parser need to resolve these references)
...
return value of the expression (float, integer, string, whatever)
}
}

Aparentemente, mi maestro me dijo que este es un mal diseño, porque estas clases están demasiado acopladas y esto es un olor a código. ¿Alguien puede explicarme por qué esto es tan malo? ¿Cómo puedo hacer un mejor diseño?

Gracias, lo siento si cometí algunos errores tipográficos o el código no es legible


Solución del problema

Creo que quieres algo como:

Class Main{
public void main(){
DocumentController dc = new DocumentController();
//you can get ahold of the parser by
Parser p = dc.getParser();
}
}
Class Parser{
DocumentController dc;
public Parser(DocumentController dc){
this.dc = dc;
}
//your methods
}
Class DocumentController{
Parser p;
public DocumentController(){
this.p = new Parser(this);
}

public Parser getParser(){
return this.p;
}
//your methods
}

Aunque probablemente haya mejores formas de hacer esto, como pasar su objeto al método cuando lo necesite. Algo como

 Class Main{
public void main(){
DocumentController dc = new DocumentController();
Parser p = new Parser();
p.myParserMethod(dc);
dc.myDocMethod(p);
}
}
Class Parser{
public myParserMethod(DocumentController dc){
//you can use the same documentController object here
}
}
Class DocumentController{
public myDocMethod(Parser p){
//you can use your parser object here
}
}

Espero que ayude

No hay comentarios:

Publicar un comentario

Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...