2017-04-09 13 views
2

Ich erstelle einen Dienst, der einige Informationen von verschiedenen APIs erhalten. Jede API arbeitet mit einer Sprachliste, einige Sprachen sind üblich, einige sind für eine konkrete API individuell. Ich erstelle eine Schnittstelle mit universellen Methoden, um API aufzurufen.So implementieren Sie besser

public interface IOCR 
{ 
    Task<OCRResult> GetTextAsync(string fileUrl, Language language); 
} 

wo Sprache ist Enum wie:

public enum Language 
{ 
    Chinese_Simplified, 
    Chinese_Traditional, 
    Danish, 
    Dutch, 
    .... 
} 

aber ersten API hat auch Russisch, zweites API Deutsch zum Beispiel. Wie man es richtig einführt?

Option 1: Erstellen Sie eine vollständige Liste aller Sprachen. Aber dann Client-Anwendung nicht wissen, ob die Sprache unterstützt wird oder nicht.

Option 2: Einfache Zeichenfolge statt Enum übergeben. Aber dann sollten wir wissen, welche Strings für konkrete API gültig sind.

Es wäre mit Basis Enum gut sein und dann geerbt Enum passieren, aber Aufzählungen erlaubt keine Vererbung

Antwort

2

Neben GetTextAsync, auch eine andere Methode in der Schnittstelle hinzufügen GetLanguages genannt, die eine Language[] zurückgibt, so könnte der Anrufer fragen die API über die Sprachen, die zur Laufzeit von ihr unterstützt werden. Dies hat den zusätzlichen Vorteil, dass Sie Ihre APIs in Zukunft problemlos erweitern können, ohne Änderungen am Service-Ende vornehmen zu müssen.

+0

1. Keine API-Methode zum Zurückgeben der Sprachenliste, nur "hart codierte" Liste in der Dokumentation, 2. Dann schlagen Sie vor, Zeichenfolge als Parameter zu übergeben? Wie kann verhindert werden, dass ein nicht unterstützter Wert gesendet wird? –

+0

@OlegSh: Da diese Schnittstelle von Ihnen auf der Client-Seite implementiert wird, können Sie 'GetLanguages' in die Schnittstelle einfügen und sie in die konkreten Klassen implementieren, die Sie für jede API erstellen, wobei Sie alle Sprachwerte fest codieren können Lesen Sie sie aus der Dokumentation. Sie müssen es nicht als "Zeichenfolgen" verwenden, sondern verwenden Sie Ihre Enumeration als Rückgabetyp für diese neue Funktion. – dotNET

+0

ok, aber meine enum ist "common", ich brauche eine "base" enum, die als Rückgabewert der Methode GetLanguages ​​implementiert wird .... Wie man es mit enum implementieren? –

Verwandte Themen