C# - Entitätshandler korrekt Verwenden Sie Clean Code [geschlossen]
Posted: 18 May 2025, 21:54
Ich habe eine Frage zum Einrichten meines Dienstes. Mein Hauptanliegen ist, ob das Design sauber und in Ordnung ist. Ob es die soliden Prinzipien erfüllt und nicht auf mich ausgeht. Diese Einheiten werden hinzugefügt. Jede Entität hat eine andere Struktur. Diese Entitäten benötigen jedoch alle gleichen Methoden - speichern Sie in der Datenbank, laden Sie sie aus Speicher herunter, berechnen Sie die Korrektheit, löschen usw. Die Entität sollte nicht erweiterbar sein. Entitäten werden dann weiter in Import und Export unterteilt.
BaseEntityHandler
BasisImportentityHandler
Bestellhandler
EntityHandlerFactory
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
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