Ahoi zusammen,
ich würde gerne mal eure Meinung zu folgendem Thema haben.
Ich schreibe gerade eine Anwendung, die mit verschiedenen REST-APIs spricht.
Problem ist, das einige der APIs mit Updates immer wieder Breaking-Changes mitbringen und da ich gerne mehrere Versionen pro API unterstützen möchte, ist nun die Frage wie ich das am besten Implementiere.
Um das Problem zu visualisieren:
Das ist jetzt nur eine sehr extreme und vereinfachte Darstellung der Situation, aber ich hoffe es verdeutlicht das Problem.
Mit v2 erwartet die Methode
Mir fallen derzeit zwei Varianten ein, wie ich das implementieren könnte, würde aber gerne eure Meinung dazu hören und eventuell hat einer eine bessere Idee?
Implementation 1
Implementation 2
PS: Ich tendiere zu Implementation 2, um dann mit dem Factory method pattern die richtige Version zu bekommen - dürfte fürs Testen auch einfacher sein.
ich würde gerne mal eure Meinung zu folgendem Thema haben.
Ich schreibe gerade eine Anwendung, die mit verschiedenen REST-APIs spricht.
Problem ist, das einige der APIs mit Updates immer wieder Breaking-Changes mitbringen und da ich gerne mehrere Versionen pro API unterstützen möchte, ist nun die Frage wie ich das am besten Implementiere.
Um das Problem zu visualisieren:
Das ist jetzt nur eine sehr extreme und vereinfachte Darstellung der Situation, aber ich hoffe es verdeutlicht das Problem.
Mit v2 erwartet die Methode
GetUser
Parameter und in v3 wurde die Methode zu GetCurrentUser
umbenannt.Mir fallen derzeit zwei Varianten ein, wie ich das implementieren könnte, würde aber gerne eure Meinung dazu hören und eventuell hat einer eine bessere Idee?
C#-Quellcode
- namespace Foobar.Services
- {
- internal class DataSourceAService
- {
- private readonly IDataSourceAVersion service;
- public DataSourceAService(string version)
- {
- switch (version)
- {
- case "v1":
- this.service = new DataSourceAV1();
- break;
- case "v2":
- this.service = new DataSourceAV2();
- break;
- default:
- throw new NotImplementedException();
- }
- }
- public void Exec()
- {
- this.service.Exec();
- }
- private interface IDataSourceAVersion
- {
- void Exec();
- }
- private class DataSourceAV1 :IDataSourceAVersion
- {
- public void Exec()
- {
- throw new NotImplementedException();
- }
- }
- private class DataSourceAV2 :IDataSourceAVersion
- {
- public void Exec()
- {
- throw new NotImplementedException();
- }
- }
- }
- }
C#-Quellcode
- namespace Foobar.Services
- {
- interface IDataSourceBService
- {
- void Exec();
- }
- internal class DataSourceBServiceV1 :IDataSourceBService
- {
- public void Exec()
- {
- throw new NotImplementedException();
- }
- }
- internal class DataSourceBServiceV2 :IDataSourceBService
- {
- public void Exec()
- {
- throw new NotImplementedException();
- }
- }
- }
PS: Ich tendiere zu Implementation 2, um dann mit dem Factory method pattern die richtige Version zu bekommen - dürfte fürs Testen auch einfacher sein.
Antivirus 2.0: Der perfekte Schutz gegen Malware > Weitere Informationen
Debuggen, Fehler finden und beseitigen
Updater - Worauf sollte man bei eigenen Updatern achten?
Debuggen, Fehler finden und beseitigen
Updater - Worauf sollte man bei eigenen Updatern achten?
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „slice“ ()