Cześć,
Próbuję zrozumieć i nauczyć się stosować zasady SOLID
.
Mam taki fragment kodu:
public class Post
{
public int id {get; private set;}
public string content {get; set;}
public Post(int id, string content)
{
this.id = id;
this.content = content;
}
public Post(string content)
{
this.content = content;
}
}
public interface IDbConnector
{
Post GetPost(int postId);
int AddPost(string content);
void DeletePost(Post post);
void UpdatePost(Post post)
}
public class PostManager : IDbConnector
{
private IDbConnector dbConnector;
public PostManager(IDbConnector dbConnector)
{
this.dbConnector = dbConnector;
}
public Post GetPost(int postId)
{
Post post = dbConnector.GetPost(postId);
return post;
}
public int AddPost(string content)
{
return dbConnector.AddPost(content);
}
public void DeletePost(Post post)
{
dbConnector.DeletePost(post);
}
public void UpdatePost(Post post)
{
dbConnector.UpdatePost(post);
}
}
Mam dwa pytania:
-
Czy dobrze myślę, że klasa
PostManager
łamie zasadę pojedynczej odpowiedzialności?
Jeżeli tak to jak powinna wyglądać jej implementacja? -
Czy rozwiązanie z wstrzykiwaniem
IDbConnector
jest poprawnym rozwiązaniem, aby zasada otwarte-zamknięte była spełniona? (z założeniaPostManager
może dostawać różne implementacje dbConnectora - np. w zależności od tego czy zapisujemy bezpośrednio do bazy danych czy np, przez jakieś API)?