0

我已经通过使用 CodeIgniter 框架来开发图书馆/图书管理系统。我对这一切都很陌生,并且有自己的学习方式,如果这听起来像一个愚蠢的问题,请耐心等待。

我已经到了对概念和设计有疑问的地步。

我有很多视图、一个完成大部分工作的控制器和一个模型。我现在意识到虽然这都是很好的 MVC,但它的结构并不一定很好。例如,有很多关于一张桌子/一个模型等的参考资料。

所以我可以很容易地将我的模型分成一个libraries_model和一个books_model。但我不确定的是:

1) 我的 books_model 是 book 对象吗(从概念上讲)?或者我应该创建一个单独的“书对象”,它显然使用我的“books_model”(毕竟这是 MVC)。即它们是一回事吗?

2)如果它们是同一个东西,那么我只会有我的books_model,存储在CodeIgniter文件夹结构的模型文件夹中。如果没有,那么我会被建议将书本对象(不是模型)放在哪里?在核心文件夹中?

我有一种感觉,它们确实是同一件事,但我只是不知道如何确认,没有问那些知道的人:)

4

1 回答 1

3

我不熟悉 CodeIgniter 所做的一切,但可以这样想:

对于 MVC,M 很大且难以泛化,而 C 非常小(V 应该非常明显)。记住原理:瘦控制器,胖模型(http://www.bing.com/search?q=thin+controllers+fat+models

现在,为了解决您的问题,这是我花了一段时间学习的东西。大多数框架在文档中谈论的“模型”并不是“模型层”的全部。您也可以将其视为“服务层”。请记住,控制器很“薄”,所以它们应该很简单。他们应该做一些事情,例如从请求中获取输入,将其传递给其他人以存储在数据库中,获取一些数据,将其发送到视图。控制器使事情变得容易。模型/服务,处理所有的逻辑。您所指的“模型”只是一小部分。

所以你有一个BookModelLibraryModel。但也许你也有一个LibraryManager跟踪图书馆并在它们之间传递书籍的工具。或者BookParser将加载一些 XML 并生成一个BookModel. 或者Translator将一本书翻译成另一种语言并制作一本书。

您是否看到“模型”很难真正定义为 1 或 2 个类?这完全取决于您的应用程序。

以这种方式考虑设计阶段。用伪代码编写控制器。像“保存这本书”、“导出图书列表”或“从这个图书馆借书”。然后,不要考虑框架,只需设计您的“业务逻辑”来完成这些任务。因此,您可以根据需要做什么来确定需要哪些课程。您可能可以保留BookModelandLibraryModel作为表示数据的一种方式。但是,您可能需要超出此范围,具体取决于您要如何处理该数据。当然,框架通常会为您处理很多“服务”层。您可能不必编写类来访问数据库,而是使用框架的数据库服务来 CRUD BookModel.

另一个 OOP 原则使课程专注于做一件事(单一职责)。因此,不要让您LibraryModel还负责借书、确定前 5 本书以及您想做的所有其他事情。只需专注于存储有关库的数据并让另一个类负责对其执行的操作(LibraryLender, BookRater)。

好吧,好吧,希望这是有帮助的,而不仅仅是荒谬的漫谈……

于 2013-11-01T00:27:57.367 回答