Okee, excuses voor de irritante topictitel, mijn creativiteit is even ergens anders mee bezig.
Ik had een vraagje: op dit moment ben ik bezig met een API te schrijven, welke berichten leest (parsed) en schrijft (serialized). Deze API komt beschikbaar voor diverse clients.
Een bericht kan er als volgt uitzien:
<message>
<id>4</id>
<text>hoi</text>
</message>
Ik wou dat ze zo simpel waren, maar het illustreert mijn probleem redelijk.
de class message ziet er als volgt uit:
Probleem is echter dat mensen die de API gaan gebruiken, steeds met vragen komen, hoe ze een bericht moeten maken, vanwege de 2 constructors. (Opmerkingen als: dan moeten ze de documentatie maar lezen, of vertel het ze gaat hier niet echt op: Het domein is te omvangrijk en te ingewikkeld daarvoor).
"Clients" dienen bij het versturen (/serializen) van berichten de constructor Message(message) aan te roepen, en niet degene met het id. Deze is voor het inlezen (parsen) van binnen gekomen berichten.
Vraag is nu dus: wat is een goede manier om er voor te zorgen dat mijn Parser wel berichten kan maken met een niet gegenereerd id, en hoe kan ik voorkomen dat anderen (Serializers/Clients) dat niet kunnen? Ik had al een kleine oplossing:
Probleem hierbij is dat dit echt heel veel werk kost. Er zijn een stuk of 50 a 60 domein klassen, dit gaan er op deze manier een stuk of 100 a 120 worden. Dit geeft een onoverzichtelijke bende (okee, meerdere packages zijn uiteraard mogelijk), en geeft me het idee dat ik zwaar ineffectief bezig ben.
Iemand suggesties?
Ik had een vraagje: op dit moment ben ik bezig met een API te schrijven, welke berichten leest (parsed) en schrijft (serialized). Deze API komt beschikbaar voor diverse clients.
Een bericht kan er als volgt uitzien:
<message>
<id>4</id>
<text>hoi</text>
</message>
Ik wou dat ze zo simpel waren, maar het illustreert mijn probleem redelijk.
de class message ziet er als volgt uit:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
| public class Message { private int id; private String message; public Message(String message) { id = generateUniqueId(...); this.message = message; } public Message(String message, int id) { this.message = message; this.id = id; } // getters en setters } |
Probleem is echter dat mensen die de API gaan gebruiken, steeds met vragen komen, hoe ze een bericht moeten maken, vanwege de 2 constructors. (Opmerkingen als: dan moeten ze de documentatie maar lezen, of vertel het ze gaat hier niet echt op: Het domein is te omvangrijk en te ingewikkeld daarvoor).
"Clients" dienen bij het versturen (/serializen) van berichten de constructor Message(message) aan te roepen, en niet degene met het id. Deze is voor het inlezen (parsen) van binnen gekomen berichten.
Vraag is nu dus: wat is een goede manier om er voor te zorgen dat mijn Parser wel berichten kan maken met een niet gegenereerd id, en hoe kan ik voorkomen dat anderen (Serializers/Clients) dat niet kunnen? Ik had al een kleine oplossing:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| public class Message { protected message; protected id; public Message(String message) { id = generateUniqueId(); .. // set en get voor message public int getId() { return this.id; } } public class ParsedMessage extends Message { public ParsedMessage(String message, int id) { this.message = message; this.id = id; } public void setId( int id ) { // niet per se nodig this.id = id; } } |
Probleem hierbij is dat dit echt heel veel werk kost. Er zijn een stuk of 50 a 60 domein klassen, dit gaan er op deze manier een stuk of 100 a 120 worden. Dit geeft een onoverzichtelijke bende (okee, meerdere packages zijn uiteraard mogelijk), en geeft me het idee dat ik zwaar ineffectief bezig ben.
Iemand suggesties?