English 中文(简体)
建设我的模式的最佳做法是什么?
原标题:What is the best practice way to build my model?

我目前正在重建一项行政申请,并寻求你们关于最佳做法的建议! 如果我没有正确的术语,那么我会怎样做?

举例来说,“用户”——通常我们能够创建一类具有诸如名称、用户名称、密码等特性的类别,并采用诸如<代码>、(用户_$)、getAllUsers(等一些方法。 最后,我们最后以一系列/指令的形式,如:array(名称=>Joe Blaggs,用户名称=>joe_90 ,密码=>123456 等)

问题是,我希望这个目标能够更多地了解其每一种特性。

考虑“用户名称”——除了知道其价值外,我还要知道物体;在形式上,什么文字标签应当显示控制,在确认时,我应当使用什么文字标签? 这些事情似乎属于这一模式。

我在这个问题上越多,我就越看其他事情;应当利用哪些超文本元素来显示这种财产,登记等财产的最低/最高价值是什么?

我设想这一类研究(简化):

class User {
    ...etc...
    private static $model = array();
    ...etc...
    function __construct(){
        ...etc...
        $this->model[ username ][ value ] = NULL; // A default value used for new objects.
        $this->model[ username ][ label ] = dictionary::lookup( username ); // Displayed on the HTML form. Actual string comes from a translation database.
        $this->model[ username ][ regex ] =  /^[0-9a-z_]{4,64}$/i ; // Used for both client-side validation and backend validation/sanitising;
        $this->model[ username ][ HTML ] =  text ; // Which type of HTML control should be used to interact with this property.
        ...etc...
        $this->model[ registration_date ][ value ] =  now ; // Default value
        $this->model[ registration_date ][ label ] = dictionary::lookup( registration_date );
        $this->model[ registration_date ][ minimum ] =  2007-06-05 ; // These values could be set by a permissions/override object.
        $this->model[ registration_date ][ maximum ] =  +1 week ;
        $this->model[ registration_date ][ HTML ] =  datepicker ;
        ...etc...
    }
    ...etc...
    function getUser($user_ID){
        ...etc...
        // getUser pulls the real data from the database and overwrites the default value for that property.
        return $this->model;
    }
}

基本上,我希望这一信息出现在一个地点,以便我不必重复超文本标记、验证例行等编码。 想法是,我可将一个用户阵列作为超文本的助手,并自动形成形式、控制和 Java本验证。

然后,我可在后面加上一个通用的<代码>(元数据=阵列)、模仿 =阵列()方法,以避免采用诸如<代码>查询名称(用户名称)、<代码>查询登记(日期)<代码>等个别方法。

  • Does this seem like a sensible approach?
  • What would you call value, label, regex, etc? Properties of properties? Attributes?
  • Using $this->model in getUser() means that the object model is overwritten, whereas it would be nicer to keep the model as a prototype and have getUser() inherit the properties.
  • Am I missing some industry-standard way of doing this? (I have been through all the frameworks - example models are always lacking!!!)
  • How does it scale when, for example, I want to display user types with a SELECT with values from another model?

感谢!

我从此获悉, Java有班次说明——。 - 这似乎比我的要求多或少。 我发现这一员额——http://interfacelab.com/metadataattributes-in-php'rel=“nofollow noreferer” http://interfacelab.com/metadataattributes-in-php。 - 没有人对方案拟定有这样的见解?

最佳回答

在研究了你的问题、答复和答复之后,我或许能够在此帮助更多一点(尽管很难在单一的答复中涵盖所有内容)。

我可以看到你在这方面所期望的是什么,而坦率地说,这就是大多数框架是如何开始的;设置一套处理一切问题的班级,然后,由于这些班次往往在尝试和测试模式上被击.,直到最后结束我所说的只是另一个框架为止,它们完全是一样的,基本上都是同样的方式,而且其目标与它们一样,一般而言,它们之间的唯一区别是编织风格和质量,它们的确对所有人来说都是一样的。

我认为,你在座的策划中再次打上了一名反家长,以解释。 你们的侧重点是使一大部分的法典能够重新使用、验证、列报等等——但你实际上做些什么(当然也没有任何犯罪)使应用的工作守则非常具体,不仅如此,你所说明的设计将几乎不可能扩大,改变层次(如移动版本),去掉技师(如蒸汽 vendors供应商),并且还因为你将展示和应用(和数据)分层混杂在一起,因此,任何点击的设计者在我面前工作、改变其应用。

如同大多数方案拟订问题一样,你可以通过做三件事来解决这个问题:

  1. designing a domain model.
  2. specifying and designing interfaces rather that worrying about the implementation.
  3. separating cross cutting concerns

设计一个领域模式是基于业务协调办公室方案的一个重要组成部分,如果你在现在以前从未这样做过,那就是一个理想的时间,那么,如果你以诸如尼共(马列)等建模语言做这项工作,或者仅仅在简单文字上这样做,那么,这个想法就是界定贵领域的所有实体,那么在讨论时便很容易读写一本书,但让它保持简单。 贵领域模式包括应用领域的所有实体,每个实体都是一回事,是思想使用者、地址、文章、产品等等,每个实体通常被定义为类别(即该实体的蓝图),每个类别都有(如用户名称、登记日期等)。

Class User {
  public $username;
  public $register_date;
}

通常,我们会把这些产品作为持久性有机污染物加以保存,然而,它们常常被视为转让物体(通常称为数据转移物体、价值物体)——是贵领域一个实体的一个简单类别蓝图——通常也试图使这些产品能够继续使用,以便以任何语言加以实施,在使用、序列化和发送到其他材料和类似材料之间——这是必然的,但事实上没有任何东西——这的确是必然的——但却触及将关切分开的问题,因为它通常是赤身裸露的,意味着没有功能,只是一个蓝图。 与实际做事的商业物品和公用事业类别有密切联系的是功能的履行,而不仅仅是价值持有者。

虽然遗产和组成也在领域模式中发挥作用,但用户可能会有几种地址,每种地址可能是几个不同用户的地址。 承租费可延伸正常地址,并增加其他财产等等。 (a) 用户是什么? 是否有用户? 是否有1-*用户数据?

在您的域模型之后,下一个步骤通常是绘制以下图:在一定形式的固定层(通常是一个数据库)之前,采用两种共同的方法(如理论,如果能正确记住的话,即是用手法),而另一种办法是使用全局模式——我离开这个部分,但通常是该系统的一个独特部分,数据库。

下面的例子是,我会跑到灰色地区,正如前面提到的“转移物体”通常都是赤 naked的物体,但是它们常常是把其他功能束缚起来的好场所,你会看到我所说的话。

说明 在座谈中,你可以简单地界定对你们所有实体的共同点:

Interface Validatable {
  function isValid();
}

之后,每个实体都可以按照自己的习俗进行例行验证:

Class User implements Validatable {
  public function isValid()
  {
    // custom validation here
    return $boolean;
  }
}

现在,你不需要担心创造某种有说服力的方式来验证物体,你只能向任何实体发出Valid()号,如果它有效或没有效力,就可发现。

最重要的一点是,通过界定接口,我们把某些关切分开,因为申请中没有任何其他部分需要做任何事情来验证物体,他们都知道,这套方法是瓦伦达的,并且称作是瓦利德(Valid)方法。

然而,我们跨越了一些关切,即每个目标(一等)现在都有自己的验证规则和模式。 这样做的一个简单办法是使验证方法静态,这样你就可以界定:

Class User {
  public static function validate(User $user)
  {
    // custom validation here
    return $boolean;
  }
}

或者你可以转向使用采集器和设计器,这是另一种非常常见的模式,你可以把验证隐藏在设计器内,从而确保每个财产都持有有效数据(或无效或违约价值)。

或者,你也许会把鉴定工作转移到自己的图书馆? 掌握自己方法的分类,或者说,你只是为了在你节省费用时检查某件事,或者在你收到数据时和当你坚持数据时,你需要验证——你如何结束这项工作是你的呼吁,而且没有最佳办法。

我已经谈到的第三个考虑是,关注是分开的? 是否应该坚持一层,看它所坚持的事物是如何描述的? 商业逻辑应当关注如何介绍情况? 实体应注意其展示的地点和方式? 或者,介绍层应如何介绍情况? 同样,我们可以问,只有一个介绍层? 一种语言? 如何在句子中贴上标签,肯定单人用户和地址是有意义的,但是,由于用户是正确的,但地址是错的,你可以仅仅通过+显示名单?)——我们也有工作考虑,像我这样,我想要新的设计人不得不改变使用账户向用户账户的列报方式,即便在要求变革的课堂上,我也想改变我的手法?

最后,我只想把我所说的一切——你们必须问一下,我想要在这里做的工作是什么? 我正在与许多开发商和长寿周期建立可承受的大规模应用——或者每个观点和行动都有一个简单的文件箱(一个文件是:GET/$_POST,验证、节省费用,然后展示它应该做些什么或应该做些什么)——在很多情况下,如果不是全部需要的话。

不用说,当有人向网络服务器提出请求时,会援引购买力平价,然后回馈答复[最后],从那时起发生的是你的领域、你的工作、客户和用户通常会提供护理,而且你可以总结一下你试图这样做的简单内容:建立尽快回应这一请求的文字,并取得预期结果。 这比这更加复杂。

要unt,做我所提到的所有事情,做更多的事,是一件大事,你就要学习负荷,了解你的工作做得更好等,但如果你只是想把工作放在门外,并容易最终维持简单的法典,只按每个观点打造一个文字,每一份行动,用奇迹(如:手提、 d、电子邮件等)。

问题回答

你回到正确的轨道上来。 在谈到模式时,我认为有许多办法,“正确”通常取决于你的应用类型。

您的模式可以是:Active Records , maybe a rel=“nofollow noretinger”>table row data Gateway或“PO”、“PO”、“PO”、“旧的PHP物体”(换言之,一个能够执行任何特定模式的类别)。

无论由谁来决定对你来说是最佳的,例如验证等。 可归入示范类。 你们应当能够作为用户对象,而不是作为联系阵列,与用户合作,这是主要事情。

www.un.org/Depts/DGACM/index_spanish.htm 这似乎是一种明智的做法。

是的,除了形式标签之外。 可能最好有一个单独的数据来源,例如表格标签,因为你可能最终希望能够将其本地化。 此外,贴标签实际上与用户物体有关,与显示表格有关。

www.un.org/Depts/DGACM/index_spanish.htm 我将如何对待(建议)。

我将有一个代表单一用户的用户物体。 应当有可能建立一个空洞的用户,或从一个阵列中创建这种用户(例如,从数据库中创建一种用户很容易)。 用户对象也应能够验证自己,例如,你可以给它一种“仪表”方法,在要求时,这种方法将检查所有价值的有效性。

此外,我还将有一个用户储存类别(或或许只是用户类别的一些静态方法),可以用来从数据库中挑选用户并储存用户。 这个存放处将直接接收用户物体,并接受用户物体作为储蓄参数。

关于形式,你可能有一个形式类别,使用对象。 这样,它就可以自动从用户那里获得价值,并用于验证本身。

我就此专题撰写了一篇论文:。 以及其中一部分其他员额。

希望这一帮助。 我只想提醒大家,我的办法是不是完美的。

对你们的抽象反应,可能根本得不到帮助,但我很高兴获得选票,因为它值得说:

你在这里再次处理两种不同的模式,在某些世界上,我们称之为这些类别和事例,在谈到其他类别和个人时,以及在其它世界,我们区分了A-Box和T-Box的言论。

您正在这里处理两套数据,请在明文中写明:

User a Class .
username a Property;
  domain User;
  range String .
registration_date a Property;
  domain User;
  range Date .

页: 1 班级数据、T-Box声明、蓝印、你如何描述你所申请的宇宙,这并不是你宇宙的描述,而是你用来描述你宇宙中的东西,即你的例子。 因此:

user1 a User ;
  username "bob";
  registration_date "2010-07-02" .

它是你的偶然、个人、A-Box数据,是你宇宙中的东西。

各位不妨在此指出,你想如何做、验证、在财产上添加标签等所有其他事情都属于第一类,是描述你宇宙的,而不是其中的事物。 因此,你想在文字上加上这一点。

username a Property;
  domain User;
  range String;
  title "Username";
  validation [ type Regex; value  /^[0-9a-z_]{4,64}$/i  ] .

这里的一点是帮助你分析你得到的其他答案——你注意到,在你的建议中,你把这两套不同的数据加在一起,而且用好的方式——希望你能够看到,普通的公共卫生和社会福利部的班级(主要是)发挥班级的作用,而每个物体(或某类)都掌握了个案数据——然而,你开始把宇宙的这两个部分合并起来,以尝试和在公共卫生和社会福利部所提供语言以外的一套可重用的班。

从这里看,你有两条道路,要么是双向的,要么是跟随语言结构,使你的法典具有半可使用性,并且遵循诸如MVC(如果你不做,你会做好事)等建议模式,要么你能够走到一个描述这些世界的尖端世界,而我们建立框架,了解我们宇宙及其中的东西的数据,但这是一个抽象的地方,在很长的时间里,它很难取得成效,尽管从长远来看是走向未来的道路。

不管怎样,我希望能够帮助你掌握其他对策。

一切最好!

您重新进入模拟收音机结构。

M只储存数据。 没有显示信息,只有 关键价值配对机。

C处理操纵这一信息的逻辑。 该系统根据用户投入对M进行改动。

第五部分处理展示物品。 它应当像智能模板那样,而不是大量用于生成超文本的原始购买力平价。

将所有“一地”改为错误做法。 你们胜过MVC的法典,每个部分都是一个独特的步骤。 这改善了法典的再利用、可读性和可维持性。





相关问题
Template Classes in C++ ... a required skill set?

I m new to C++ and am wondering how much time I should invest in learning how to implement template classes. Are they widely used in industry, or is this something I should move through quickly?

JSON with classes?

Is there a standardized way to store classes in JSON, and then converting them back into classes again from a string? For example, I might have an array of objects of type Questions. I d like to ...

Object-Oriented Perl constructor syntax and named parameters

I m a little confused about what is going on in Perl constructors. I found these two examples perldoc perlbot. package Foo; #In Perl, the constructor is just a subroutine called new. sub new { #I ...

Passing another class amongst instances

I was wondering what is the best practice re. passing (another class) amongst two instances of the same class (lets call this Primary ). So, essentially in the constructor for the first, i can ...

Where can I find object-oriented Perl tutorials? [closed]

A Google search yields a number of results - but which ones are the best? The Perl site appears to contain two - perlboot and perltoot. I m reading these now, but what else is out there? Note: I ve ...

热门标签