c# - 是否放置方法来检索与单独类中的类相关的数据

标签 c# java oop coding-style

考虑以下简化的类:

class Book {
   string title;
   Author author;
}

很简单。但是,当添加像 getBookFromDatabase(int bookId) 这样的方法时,是否应该将其作为 static 方法放在同一个类中,或者 而不是在单独的(即)BookManager-

使用示例:

Book b = Book.getBookFromDatabase(42);

对比

Book b = BookManager.getBookFromDatabase(42);

我确实意识到这在某种程度上是一个品味问题,但是遵循 OOP 指南的最佳选择是什么?

最佳答案

我更喜欢使用 Repository 从后备存储中重新组合对象。像下面这样的东西可能是一个很好的起点。

public interface IBookRepository{
    Book Load(int id);
    void Save(Book book);
} 

通过这种方式,您可以拥有多个不同的存储库实现,而不必依赖于使用数据库。例如,您可能有一个可用于测试的 InMemoryBookRepository 和一个用于类似生产环境的 DatabaseBookRepository

在风格上我也会避免使用像这样的静态方法:

BookManager.getBookFromDatabase(42);

它更难测试并且生成的代码更紧密地耦合在一起,这将使测试和更改变得更加困难。

你可以看看这个StackOverflow question在哪里可以了解有关实现存储库的更多信息。 MicrosoftMartin Fowler还对其进行了更详细的描述。

关于c# - 是否放置方法来检索与单独类中的类相关的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13788339/

相关文章:

c++ - 使用 main() 以外的其他函数显示类的对象,但在 main() 中调用;

javascript - 如何在 JavaScript 上访问 "this"的父级?

c# - 让 Entity Framework 在 Group By 上急切加载

c# - 有没有办法修改解决方案中的所有项目?

java - 要求仅插入数字

java - JVM 在 Lucene DataInput.readVInt 上崩溃

java - 非 Java 源 "on the classpath"?

c# - 你能定义一个接口(interface),使得实现它的类必须包含一个也是该类的成员吗?

c# - 安装 Open XML 2.0

c# - DataAnnotations 在 MVC 中是如何工作的?