Php I';我很难理解坚实的原则

Php I';我很难理解坚实的原则,php,oop,design-patterns,solid-principles,Php,Oop,Design Patterns,Solid Principles,我真的需要一些人帮忙。我试图在我的下一个php项目中使用坚实的原则,但我很难理解它。首先,我不能真正掌握单一责任原则 假设我正在创建用户注册。首先,我将创建用于连接到数据库的数据库类。然后,我将创建Register类,该类将接收表单中的所有用户输入。我将在Register类中创建检查输入并清除输入的方法。现在是最难的部分。假设我想检查电子邮件是否已经存在。我还需要检查用户名是否已经存在。为此,我需要访问数据库。所以,我可以将我的db连接传递给Register对象。但是,在我看来,若我遵循坚实的原

我真的需要一些人帮忙。我试图在我的下一个php项目中使用坚实的原则,但我很难理解它。首先,我不能真正掌握单一责任原则

假设我正在创建用户注册。首先,我将创建用于连接到数据库的数据库类。然后,我将创建Register类,该类将接收表单中的所有用户输入。我将在Register类中创建检查输入并清除输入的方法。现在是最难的部分。假设我想检查电子邮件是否已经存在。我还需要检查用户名是否已经存在。为此,我需要访问数据库。所以,我可以将我的db连接传递给Register对象。但是,在我看来,若我遵循坚实的原则,我就不应该在寄存器类方法中触及数据库。我真的不明白为什么那样做不好

我可以创建一些DbHandler类来处理查询、绑定参数和执行查询,并将信息从Register对象传递给它,然后检查用户名和电子邮件是否已经存在。但在我看来,这似乎没有必要。而且,对于Register类,要做的事情很少

比如说,创建一些RegisterDB类来处理Register对象的db交互,这是一个好的解决方案吗?不过,Register类也只是做了一些事情


我的头会爆炸的,我真的需要帮助,伙计们

您应该阅读一些有关软件设计和设计原则的文献,似乎您缺少其中的一些要点。 首先,遵循SOLID是一个很好的方法,但是你应该更进一步,在节选中思考。 针对您的特定问题:您应该创建一个接口或抽象类来表示您的数据库处理,然后在sperate子类中实现一个特定的数据库处理程序,或者在这个类中实现接口。这将有助于Liskov的取代基原则和界面分离原则。使用这种方法,您可以在外部使用数据库处理程序的抽象,而不必关心它是MariaDB、OrcaleDB还是其他什么,因为您不需要处理特定的类。 验证问题:由于这是一个一般性问题,它也属于您的抽象,因为每个数据库处理程序都需要检查用户是否已经存在,所以可以随意实现一个方法,该方法使用用户名并返回布尔值(如果已经存在)。 整个方法将满足依赖倒置原则,这将提高代码的可维护性,并使其更易于阅读和扩展,因为您可以随时切换具体实现,而无需接触使用它们的代码。
以下是关于这些主题的一些文献:

阅读有关MVC体系结构和存储库模式的内容,这些应该会对您有所帮助。从最前面的开始,一次只为一个层设计类。仅当您对当前层中的所有类都满意时,才移动到下一层。这样,您就避免了用太多的职责重载类。