我正在观看Google Tech Talks视频,他们经常提到多态性.
什么是多态,它是什么,以及它是如何使用的?
接口的原因真正让我无所适从.根据我的理解,这是一种解决C#中不存在的不存在的多继承的问题(或者我被告知).
我所看到的是,你预先定义了一些成员和函数,然后必须再次在类中重新定义.从而使界面变得多余.它只是感觉像句法...好吧,垃圾对我来说(请不要冒犯意思.垃圾就像无用的东西).
在下面给出的示例中,从堆栈溢出的不同C#接口线程中获取,我只是创建一个名为Pizza而不是接口的基类.
简单示例(取自不同的堆栈溢出贡献)
public interface IPizza
{
public void Order();
}
public class PepperoniPizza : IPizza
{
public void Order()
{
//Order Pepperoni pizza
}
}
public class HawaiiPizza : IPizza
{
public void Order()
{
//Order HawaiiPizza
}
}
Run Code Online (Sandbox Code Playgroud) 我似乎无法理解"松耦合"的概念.我想这不利于单词"宽松"通常有负面的含义,所以我总是忘了松耦合是一个很好的事情.
有人请展示一些说明这个概念的"之前"和"之后"代码(或伪代码)吗?
从不是getter/setter方法的对象方法中访问对象属性的"纯粹"或"正确"方法是什么?
我知道从对象外面你应该使用一个getter/setter,但是你可以从内部做到:
Java的:
String property = this.property;
Run Code Online (Sandbox Code Playgroud)
PHP:
$property = $this->property;
Run Code Online (Sandbox Code Playgroud)
或者你会这样做:
Java的:
String property = this.getProperty();
Run Code Online (Sandbox Code Playgroud)
PHP:
$property = $this->getProperty();
Run Code Online (Sandbox Code Playgroud)
请原谅我,如果我的Java稍微关闭,那我用Java编程已经有一年...
编辑:
似乎人们假设我只讨论私有或受保护的变量/属性.当我学习OO时,我被教导为每个属性使用getter/setter,即使它是公开的(实际上我被告知永远不会公开任何变量/属性).所以,我可能会从一开始的错误假设开始.似乎回答这个问题的人可能会说你应该拥有公共财产,并且那些不需要吸气剂和制定者,这与我所教的内容相违背,以及我所谈论的内容,尽管可能需要讨论好.虽然这可能是一个不同问题的好主题......
我最近了解到在我的PHP应用程序中使用依赖注入(DI)的优点.但是,我仍然不确定如何为依赖项创建容器,或者我是否应该在我正在构建的在线论坛中使用DI.
以下代码是我根据我从这里学到的例子制作的DI容器的版本.
class ioc {
var $db;
var $session;
var $user_id;
static function newUser(static::$db, static::$user_id) {
$user = new User($db, $user_id);
return $user;
}
static function newLogin(static::$db, static::$session) {
$login = new Login($db, $session);
return $login;
}
}
$user = ioc::newUser();
$login = ioc::newLogin();
Run Code Online (Sandbox Code Playgroud)
我有几个问题:
1)我应该在哪里实例化我注入的依赖项,例如$ database,$ session等?它是在容器类之外,还是在容器的构造函数内部.
2)如果我需要在其他类中创建User类的多个实例,该怎么办?我无法注入先前实例化的$ user对象,因为该实例已被使用.但是,在另一个类中创建多个User实例会违反DI规则.例如:
class Users {
function __construct($db, $user_id) {
$this->db = $db;
$this->user_id = $user_id;
}
function create_friends_list() {
$st = $this->$db->prepare("SELECT user_id FROM friends WHERE user_id = $this->user_id");
$st->execute(); …Run Code Online (Sandbox Code Playgroud) 我是DDD世界的新手,在阅读了几本关于它的书之后(其中包括Evans DDD)我无法在互联网上找到我的问题的答案:用DDD创建子实体的正确方法是什么?你看,互联网上的很多信息都在一些简单的层面上运作.但是细节上的恶魔并没有为了简单起见而在数十个DDD样本中省略它们.
我在stackoverflow 上来自我自己在similair问题上的回答.我对这个问题的看法并不完全满意,所以我想我需要详细说明这个问题.
例如,我需要创建代表汽车命名的简单模型:公司,模型和修改(例如,日产天籁2012 - 将是"日产"公司,"天籁"模型和"2012"修改).
我想要创建的模型的草图如下所示:
CarsCompany
{
Name
(child entities) Models
}
CarsModel
{
(parent entity) Company
Name
(child entities) Modifications
}
CarsModification
{
(parent entity) Model
Name
}
Run Code Online (Sandbox Code Playgroud)
所以,现在我需要创建代码.我将使用C#作为语言,将NHibernate用作ORM.这很重要,通常在互联网上的大量DDD样本中没有显示.
第一种方法.
我将从通过工厂方法创建典型对象的简单方法开始.
public class CarsCompany
{
public virtual string Name { get; protected set; }
public virtual IEnumerable<CarsModel> Models { get { return new ImmutableSet<CarsModel> (this._models); } }
private readonly ISet<CarsModel> _models = new HashedSet<CarsModel> ();
protected CarsCompany ()
{
}
public static …Run Code Online (Sandbox Code Playgroud) 我试图了解真正定义紧耦合的原因.我已经阅读了很多关于这个主题的帖子,但有一件事仍然不适合我.
我理解应该使用接口而不是具体实现将类注入其他类.我也理解,如果一个类遵循一个接口,那么任何使用注入接口的类都可以调用接口中定义的公共函数并期望类似的功能.
interface iFormatter()
{
public function format(array $order): array
}
public class OrderFormatter implements iFormatter
{
public function format(array $order): array
{
// ...
return $formattedArray;
}
}
public class OrderGenerator implements iGenerator
{
private $formatter;
public function __construct(iFormatter $formatter)
{
$this->formatter = $formatter;
}
public function generate()
{
// ...
return $this->formatter->format($order);
}
}
Run Code Online (Sandbox Code Playgroud)
所以我认为在只有格式化器改变的情况下,这将被定义为松散耦合;
$example = new OrderGenerator(new CarOrderFormatter);
$example->generate();
$example = new OrderGenerator(new VanOrderFormatter);
$example->generate();
Run Code Online (Sandbox Code Playgroud)
我不太清楚的是,当你把责任从彼此中抽离出来时,这些课程仍然紧密相连.就像是
$example = …Run Code Online (Sandbox Code Playgroud) 我在MSDN上研究MVC的几个概念,我达到了一个点,他们写了一个词"MVC的三个主要组件之间的松散耦合".
我搜索了很多关于谷歌松散耦合的信息.但我每次都得到不同的答案.
即使我有一个新词紧密耦合和紧密凝聚力.
任何人都可以正确定义这个词,它究竟意味着什么.
我很期待你的回复.
谢谢.
在CakePHP中,如何在shell中加载组件?
要在控制器中使用组件,请在名为$ components的属性中包含一组组件.这对我的壳牌不起作用.文档中没有提供"即时"加载.
class MakePdfsShell extends Shell {
public $components = array('Document'); // <- this doesn't work
public function main()
{
$this->Document = $this->Components->load('Document'); // <- this doesnt work either
$this->Document->generate(); // <- this is what I want to do
}
...
Run Code Online (Sandbox Code Playgroud) 我已经提到过这个链接, Java中松散和紧耦合的区别?
在我提到这一点后,我仍然感到困惑,根本不明白.
作为Java初学者,我无法轻易理解它.请有人能提出更好的例子吗?
任何人都可以说我,在java中耦合的重要性以及设计代码时需要的原因,地点,方式和时间是什么?
oop ×4
php ×3
c# ×2
java ×2
.net ×1
asp.net-mvc ×1
cakephp ×1
decoupling ×1
interface ×1
nhibernate ×1
parent-child ×1
polymorphism ×1
theory ×1