Code: Select all
public interface IBaseEntityHandler {
EntityType EntityType { get; set; }
Task SaveToStorageAsync(string filePath);
Task LoadFromStorageAsync(string filePath);
Task CalculateAsync();
Task SaveToDatanodeAsync();
.......
}
Code: Select all
public abstract class BaseEntityHandler : IBaseEntityHandler {
private readonly IDatabase _database;
private readonly IStorage _storage;
EntityType EntityType { get; set; }
Task SaveToStorageAsync(string filePath) {
_storage.SaveAsync(filePath);
}
Task LoadFromStorageAsync(string filePath) {
_storage.Load(filePath);
}
Task SaveToDatabaseAsync() {
_database.Save();
}
Task CalculateAsync() {
await CalculateAsyncInternal();
}
abstract Task CalculateAsyncInternal();
}
Code: Select all
public abstract class BaseImportEntityHandler : BaseEntityHandler {
abstract Task SomeSpecial();
}
Code: Select all
public class OrderHandler : BaseImportEntityHandler {
public EntityType EntityType { get; set; } = EntityType.Order;
public async Task CalculateAsyncInternal() {
}
public async Task SomeSpecial() {
}
}
public class EntityHandlerFactory {
public static IBaseEntityHandler CreateEntityHandler(EntityType entityType) {
switch (entityType) {
case EntityType.Order:
return new OrderHandler() as IBaseEntityHandler;
default:
throw new NotImplementedException($"Entity type {entityType} not implemented.");
}
}
}
< /code>
Meine Frage. Ist es in Ordnung, Vererbung zu verwenden, anstatt hier zu falten? Jeder Entitätshandler muss die gleichen Methoden implementieren. Wenn es besondere gibt - importieren/exportieren, werden sie nur erweitert, aber die Basis ändert sich nicht. Daher bricht es nicht die Idee der Erbschaft. Und die zweite Frage ist dieser Vorschlag ok?
Danke