【问题标题】:Separating application from app library, shared library, components, etc将应用程序与应用程序库、共享库、组件等分离
【发布时间】:2011-03-05 17:47:45
【问题描述】:

我正在创建一个 MVC 应用程序框架,仅使用我自己创建的库和组件(主要是一种学习体验),但我不太清楚如何将每种库彼此分开。

我们将我的应用程序称为 Cat。

假设我正在创建一个名为 Dog 的库,它有点像 Zend,并且充满了执行不同任务的不同组件(数据库类、DAL、路由器,用于确定从给定 URL 中选择哪些控制器,等),并将位于 root/library/ 目录中。

我还将创建一个特定于应用程序的应用程序库(可能包含诸如 FrontController 或 Application 之类的类,以帮助启动和配置应用程序)。这将位于 root/app/library/

我想在这个应用程序和其他应用程序上使用 Dog 库,并且希望它独立于 Cat,因此它可以用于许多其他应用程序。

在我的 Cat 应用程序中,假设我创建了一个新的数据库对象。我应该写吗:

$database = new Dog_Database();

或者拥有一个纯粹扩展 Dog_Database 类的 Cat_Database 类会更好吗?这意味着我可以在以后告诉 Cat_Database 扩展 Ferret_Database 如果需要...

我想主要的问题是,我的应用程序应该直接从共享库调用东西,还是应该调用特定于应用程序的库类,如果需要,这些库类又从共享库扩展?

【问题讨论】:

    标签: php model-view-controller class components directory-structure


    【解决方案1】:

    我认为您在一定程度上回答了您自己的问题。你说你想让狗独立于猫。这意味着,对我来说,在两者之间使用大量的依赖注入,而不是大量的继承或直接调用。如果您想在没有框架的其他地方重用应用程序库,则不能让您的应用程序库扩展框架中的类。

    很难为这样一个广泛的问题提供详细的建议。不过,也许其中一些概念会对您有所帮助。

    Dependency Injection

    Programming to an interface

    【讨论】:

    • 我看了一下DI,我觉得我理解得很好。基本上这个想法是创建一个对象并将启动的对象传递给它,而不是让对象本身启动其他对象,对吗?你说我不能让应用程序库扩展框架类,因为我想在其他地方重用应用程序,但实际上应用程序本身不需要与其他框架一起工作;我希望框架可以与其他应用程序一起使用。那么实用程序类呢? Dog_Url::getDomain() 等..?框架文件(index.php、boostrap.php)是否应该使用这些以及控制器/模型?
    • 这并不能完全回答我的问题,但它有所帮助,所以我想我会“接受”这个答案。如果其他人有任何答案,请随时发布。 (或回答我上次评论中的问题)。谢谢埃沃尔德!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多