我有以下具体的Animal产品:Dog和Cat。我正在使用parameterizedFactorymethod创造所述产品。根据传递给Factory方法的AnimalInfo参数,将创建一个具体的产品。映射逻辑放在工厂方法中。这是我的代码:publicabstractclassAnimalInfo{publicabstractStringSound{get;}}publicclassDogInfo:AnimalInfo{publicoverridestringSound{get{return"Bark";}}}publicclassCatInfo:AnimalInfo{publicov
我正在制作一个角色扮演游戏只是为了好玩并了解更多关于SOLID原则的信息。我关注的第一件事就是SRP。我有一个代表游戏中角色的“角色”类。它有诸如名称、生命值、法力值、能力分数等内容。现在,通常我也会在我的Character类中放置方法,所以它看起来像这样......publicclassCharacter{publicstringName{get;set;}publicintHealth{get;set;}publicintMana{get;set;}publicDictionaryAbilityScores{get;set;}//baseattackbonusdependsonch
这是一个非常简单的问题,我仍然很不安:为什么现在广泛接受类通过访问器方法返回对其私有(private)成员的引用?这不是完全破坏了封装原则吗?如果这没问题,那为什么不公开该成员呢!?publicclassEncapsulationViolator{privateobjectabuseMe;publicobjectAbuseMe{get{returnabuseMe;}}}编辑我考虑的情况是这样的EncapsulationViolatorev=newEncapsulationViolator();objecto=ev.AbuseMe;o.SetValue(newValue);现在ev的状态
我正在对SOLIDprincipal进行一些研究,发现了Repository模式实现中的一些问题。我将逐一解释,如有错误请指正。问题1存储库模式打破了单一职责原则(S)假设我们有一个定义为的接口(interface)publicinterfaceIRepositorywhereT:IEntity{IEnumerableList{get;}voidAdd(Tentity);voidDelete(Tentity);voidUpdate(Tentity);TFindById(intId);}显然它违反了单一责任原则,因为当我们实现这个接口(interface)时,在一个类中我们同时放置了Co
我是在不久前接触到Clojure的,虽然我还没有完全理解它的所有概念,但它给了我一个替代Java和PHP的OO的机会,我真的很想转向。我认为Clojure的系统是我的理想。我知道我想让它尽可能多地影响我的PHP编码风格。我真的不喜欢PHP中的OO,我讨厌样板文件的数量和它似乎经常导致的隐藏的复杂性。同时,我可以看到封装的好处,其中您拥有多位数据,这些数据具有修改自身的能力。也许使用一阶函数是允许封装的主要方式,但除此之外如何将面向对象的好处转化为函数式编程?我现在遇到的部分问题是如何处理一组相关的函数,否则这些函数可能会被分组到一个类中,以一种合理的方式使它们对彼此有用。
关于在Doctrine2中创建一对多单向关系的几个问题:是否需要连接表?docs说“看这个例子”,但我看到的只是生成的模式。有人介意快速举个例子,这样我就能得到正确的注释吗? 最佳答案 您使用的是2.0.x版本的文档。检查thisone.您将拥有示例。是的,您可以避免在两个类之一中使用注释。 关于php-原则2-一对多单向,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/24874
假设您有抽象类A做一些事情。然后你有抽象类B做其他事情。最后是一些普通类,比方说C...Z。A和B都提供了类C..Z类使用的功能。在我的例子中,主要是一个静态的观察者模式,以及一些__get魔术+某种类型的属性的延迟加载-这不是静态的。我正在考虑将它合并到一个类中,但我确定它违反了SRP:)所以我在C、D等中扩展A、B...基本上所有C..Z类都继承了A和B类的功能。所以除了他们应该做的,他们还做观察者的事情等等这是否违反单一职责原则? 最佳答案 我不知道这是否适用于您的具体情况,但我发现大多数时候,一个抽象类及其实现可以拆分为两个
由于有点传统(如果生疏)编程背景,我正忙于掌握网站的“无状态”特性。这是一个相当大的心态转变!我为我工作的团队创建了一个小型网站,供内部使用来跟踪我们日常工作的某些方面。该网站功能正常,我为我设法想出的东西感到非常自豪,blablabla。但是我在某处读到一些东西表明我可能以糟糕的方式完成了它。特别是,团队网站的中心页面完成了大部分工作。它会检查您来自哪里,然后“切换”以执行一些工作(在数据库中进行一些更改),然后再次呈现页面。在许多情况下,页面只是调用自身!我所做的是展示一张table。每行的最后一列是一组html表单。每个表单都有一个提交按钮,至少有一个隐藏字段。“提交”按钮具有名
想请教一下Laravel中的SOLID原则,特别是接口(interface)隔离原则。假设我们有一个用户可以发送订单的应用程序。但是对于每个用户,我们都有不同的方式来发送订单。例如用户一-通过电子邮件发送订单。用户二-通过上传到ftp的xml发送订单。按照这种思路,我们可以在php中创建接口(interface):然后为每个特定用户实现它。但是在Laravel中,我们只有一个类User。假设用户具有用户类型的属性,我们可以从中找到sendOrder类型。在Laravel中执行此操作的最佳方法是什么?也许是一个switch/if来查找并返回正确的实现或者有更好的方法?
我没有使用现成的框架,也不特别想(我也不想探究原因…)。不管怎样,关于我的问题,我希望它有意义…我在试着让我的头在模型中应该去和控制器中应该去。最初,我的印象是模型类应该表示一个实际的对象(例如,来自数据库cars表的car),模型属性应该映射数据库字段。然而,我现在感觉到我的想法是错误的——模型类的一个实例是否代表了一个实际的项目,或者它是否包含了许多做事情的方法——根据我前面的例子,有时是一辆车,有时是多辆车。例如,我想从数据库中获取所有汽车并在视图中显示它们。我是不是觉得应该按照这样的思路?控制器文件functionlist(){$cars=$this->model->get_a