Questa è un'altra domanda di follow up sulla progettazione orientata agli oggetti in generale. Sto cercando di suddividerli per separare le domande per consiglio che ho ricevuto da @ Jay in precedenza.
Ho una nuova domanda, quasi ogni fase del processo di progettazione OO. Ho cercato di ottenere le idee da libri, articoli e il web. Diventa solo più confuso. Mi piacerebbe avere qualche consiglio da parte degli esperti qui, quindi posso avere i miei concetti giusti.
Supponiamo di avere gli oggetti seguenti:
public class AddressRecord {
protected String addressLine1;
protected String addressLine2;
protected String city;
protected String state;
protected String postalCode;
protected String country;
....
}
public class AddressValidationRequest {
private AddressRecord addresses[];
protected ArrayList actions;
protected ArrayList columns;
protected Properties options;
...
}
Devo mantenere AddressRecord completamente nascosto all'interno di Request (è Aggregation?) o esporre e accedere a AddressRecord dall'esterno (Composition)?
(Per me, anche l'ereditarietà sembrava un'opzione per estendere AddressRecord a una richiesta, anche se sento che sono entità distinte nel mondo reale, quindi ho lasciato cadere quell'idea).
Ciò che intendo è, dovrei avere AddressRecord come oggetto privato all'interno di Request e aggiungere getter / setter nella Request stessa per ogni campo in AddressRecord?
O semplicemente aggiungi getter / setter per ottenere / impostare AddressRecord [] dalla Request e quindi impostarlo all'esterno, ad esempio in un codice controller?
(Questa idea successiva l'ho ottenuta quando ho cercato di estrarre la classe AddressRecord da Request in Eclipse come di seguito:
public class AddressSearchRequest {
AddressRecord address;
public AddressSearchRequest(String format, String customerId, String addressLine1, String suite,
String city, String state, String postalCode) {
this.format = format;
this.customerId = customerId;
this.address.setAddressLine1(addressLine1);
this.address.setAddressLine2(Suite);
this.address.setCity(city);
this.address.setState(state);
this.address.setPostalCode(postalcode);
}
public void setAddressLine1(String addressLine1) {
this.address.setAddressLine1(addressLine1);
}
public String getSuite() {
return address.getAddressLine2();
}
public void setSuite(String suite) {
this.address.setAddressLine2(suite);
}
public String getCity() {
return address.getCity();
}
public void setCity(String city) {
this.address.setCity(city);
}
public String getState() {
return address.getState();
}
public void setState(String state) {
this.address.setState(state);
}
public String getPostalCode() {
return address.getPostalCode();
}
public void setPostalCode(String postalCode) {
this.address.setPostalCode(postalCode);
}
}
UPDATE:
Ci sono in realtà 2 diversi tipi di richieste che sto trattando - una richiesta di ricerca - prende solo un indirizzo e può restituire più corrispondenze.
Una richiesta di convalida può richiedere uno o più indirizzi.
Li ho avuti entrambi come Request provocando una certa confusione. corretto.
Nota: sto utilizzando AddressRecord anche in altri tipi di richieste e classi di risposta.