php面向对象编程
我有一些关于OOP的问题。我不是一个高级用户,我正面临着一个问题,有些人以前可能有过这样的经验 基本上,我使用MVC来处理我的php项目。我试着使班级尽可能独立。但我认为这相当困难。e、 g: 我有一辆高级轿车和一个高级用户。用户将汽车信息发布到网站,可能是为了销售 在类User中,我有getUser来获取用户信息 所以在汽车课上,我可能有setCar,getCar,saveCar。要显示这些汽车,我可能需要一个displayCars()。在displayCars()中,我可以使用getCar获取汽车列表。但我可能还需要使用User::getUser来获取提交这些汽车的用户的用户信息。所以在某种程度上,displayCars依赖于User::getUserphp面向对象编程,php,oop,ooad,Php,Oop,Ooad,我有一些关于OOP的问题。我不是一个高级用户,我正面临着一个问题,有些人以前可能有过这样的经验 基本上,我使用MVC来处理我的php项目。我试着使班级尽可能独立。但我认为这相当困难。e、 g: 我有一辆高级轿车和一个高级用户。用户将汽车信息发布到网站,可能是为了销售 在类User中,我有getUser来获取用户信息 所以在汽车课上,我可能有setCar,getCar,saveCar。要显示这些汽车,我可能需要一个displayCars()。在displayCars()中,我可以使用getCar获
那么我该怎么办呢?你需要的不仅仅是汽车和用户来模拟这个问题。从概念上讲,我至少有以下几点:
- 每个单独的汽车都应该由一个汽车对象表示
- 用户输入填充汽车对象属性的信息
- 汽车对象和提交该汽车的用户都成为CarDBItem对象的属性
- 然后将所有的CarDBItems放入一个CarDB对象中,该对象管理任何用户输入的所有汽车
当然,这是非常简化的——当您实际编写应用程序时,会有比这更多的内容。但我认为,从这些角度来看问题是一个很好的起点。你需要的不仅仅是汽车和用户来模拟这个问题。从概念上讲,我至少有以下几点:
- 每个单独的汽车都应该由一个汽车对象表示
- 用户输入填充汽车对象属性的信息
- 汽车对象和提交该汽车的用户都成为CarDBItem对象的属性
- 然后将所有的CarDBItems放入一个CarDB对象中,该对象管理任何用户输入的所有汽车
当然,这是非常简化的——当您实际编写应用程序时,会有比这更多的内容。但我认为,从这些角度来看待问题是一个很好的起点。您的困惑部分来自这样一个事实,即OO和MVC是完全不同的设计概念,事实上可能相互矛盾。我在工作中也面临同样的争论 例如,OO说只有类本身应该知道类是如何工作的,而其他所有类都应该只与它的接口通信。MVC说您应该拥有几乎没有任何功能的哑数据(模型)对象,并使用单独的类来保存业务逻辑 OO表示,如果您需要两个类以类似的方式工作,请让它们从基类继承公共功能,而MVC通常更喜欢在调用具有实际功能的其他类的类之前放置一个外观 您可以将两者结合,但不能在相同的位置或层中。您可以使用组合来构建作为其他模型超集的模型(数据对象),也可以使用继承来创建类似的控制器,但必须小心
基于Web的应用程序非常适合MVC,正如其他人所指出的,有一些已建立的框架可以用来指导您。您的困惑部分来自这样一个事实,即OO和MVC是完全不同的设计概念,事实上可能相互矛盾。我在工作中也面临同样的争论 例如,OO说只有类本身应该知道类是如何工作的,而其他所有类都应该只与它的接口通信。MVC说您应该拥有几乎没有任何功能的哑数据(模型)对象,并使用单独的类来保存业务逻辑 OO表示,如果您需要两个类以类似的方式工作,请让它们从基类继承公共功能,而MVC通常更喜欢在调用具有实际功能的其他类的类之前放置一个外观 您可以将两者结合,但不能在相同的位置或层中。您可以使用组合来构建作为其他模型超集的模型(数据对象),也可以使用继承来创建类似的控制器,但必须小心
基于Web的应用程序非常适合MVC,正如其他人所指出的,有一些已建立的框架可用于指导您。也许您已经让getCars返回发布汽车的用户id。然后可以使用该用户id并将其传递给getUser方法。它应该在一个专门展示汽车的单独类别中。这个独立的显示器可以显示实现ICar的任何类。这样,显示器就可以用于不同的ICar实现。将显示代码与业务逻辑(功能)分开。Google“编程到接口而不是实现”Hi StackOverflowNewbie,是的getCars有用户ID,我用它传递给User::getUser()以获取用户信息。但是这里的问题是Car::displayCars()依赖于User::getUser()。我想减少耦合。=)嗨,Spidy,我会考虑你的想法。我认为将显示功能分离将减少耦合。然而,这让我想到了另一个相关的问题。例如:我有一个类CarComments,它处理用户提交的这些汽车的评论。如果我调用deleteCar(),它也应该调用CarComment::deleteComments()。所以也有一些依赖性。hmmm=)也许您已经让getCars也返回发布汽车的人的用户id。然后可以使用该用户id并将其传递给getUser方法。它应该在一个专门展示汽车的单独类别中。这个独立的显示器可以显示实现ICar的任何类。这样,显示器就可以用于不同的ICar实现。分离显示器c