为了便于说明,我们假设我正在构建一个简单的博客应用程序,并且有一个名为Blog的类:
Class Blog(){
__constructor(){
connectToDatabase();
}
}
Class BlogPost($id) extends Blog {
public $title;
public $body;
etc.
}
blogpost类可以实例化为表示特定博客帖子的对象。但是当我想列出数据库中的所有记录时,我必须将该功能放在其他地方。
我可以将它放在Blog类中,但假设我有许多这样的函数不适用于特定对象,我应该把它们放在哪里?
或许我正在写一行日志文件。有一个'logfile'类包含一个将传递的字符串写入文本文件的单个函数似乎很愚蠢。
最好将它们全部放在某个Utility()类中,还是应该创建几个类,如util_commenting(),util_archives()?我应该在哪里存储所有这些小的独立功能?
答案 0 :(得分:1)
“概念课”是一个值得记住的好格言。
尝试编写一些故事/场景/用例来描述系统的工作原理。
您可能会发现免费功能最终会出现在满足某些故事所需的组中。
我推荐Rebecca Wirfs-Brock的“责任驱动设计”。她overview paper上有一个很好的publications page。
答案 1 :(得分:0)
您可以拥有BlogPostRepository或Database对象,它可以返回所有BlogPost。
答案 2 :(得分:0)
这是一个持久层对象。通常它是数据访问对象(DAO)或存储库,而不是实用程序或常规函数。
我会将该函数从构造函数中连接到数据库。它不属于那里。
如果我用Java编写它,它可能看起来像这样:
public class Blog
{
private Long id;
private String title;
private String body;
private String author;
private Date publishDate;
// Other attributes and functions here.
}
public interface BlogDao
{
Blog find(Long id);
List<Blog> find();
List<Blog> find(Date begDate, Date endDate);
List<Blog> find(String author);
void saveOrUpdate(Blog blog);
void delete(Blog);
}
有一个类使用我想要的任何技术(JDBC,Hibernate等)实现了BlogDao接口。
答案 3 :(得分:0)
大多数情况下,自由函数应该放在一个命名良好的命名空间中。如果你看一下C ++标准库,std中有很多免费函数(例如sort)。您可以创建一个博客命名空间,博客类包含在(blog :: blog)中,然后可以使用其他实用程序免费函数来处理该命名空间中的博客。
他们不需要进入任何课程,这绝对不是采用单身人士风格的最佳做法。