代码之家  ›  专栏  ›  技术社区  ›  JW.

我对类名的选择受到Windows XP最大路径长度问题的阻碍,这些问题由SVN/域驱动设计-任何解决方案

  •  1
  • JW.  · 技术社区  · 16 年前

    我正在用php 5.2创建一个网站

    我喜欢给我的课起明确的名字

    我还有一个约定,说“文件的路径和名称”与“类的名称”匹配

    所以一个类叫做:

    abcsitecore_ctrls_datatransfer_importmerge控制器

    会坐在我的SVN工作副本:

    C:\_my\websrv\ABCCoUkHosting2\webserve\my_library\vendor\ABCSiteCore-6-2\ABCSiteCore\Ctrlrs\DataTransfer\ImportMergeController.php
    

    我发现命名约定可以让我更好地了解我的代码库,从而更好地理解和减少复杂性。

    不幸的是,我的Windows XP PC上似乎有一个最大路径长度。当我试图将子版本文件签入到我的工作副本中时,它似乎会导致问题。

    如果路径太长,我无法将其签出-签出失败。

    所以我发现自己花了很多时间来想一个域名的概念。

    我可能想将一个类命名为“通知服务”,但最终我称它为“ntfctnsrvce”。当我试图创建一个规范类时,它也会引起问题。

    比如说,我想用一个显式名称调用一个spec类,比如说:

    $hasBeenNotifiedSpec = new ABCSiteCore_Model_MssgSys_Rules_Customers_HasCustomerBeenSentNotificationOfOnlineTransactionPaymentByEmail($notificationLog);
    
    if($hasBeenNotifiedSpec->isSatisfiedBy($customer))
     {
     ...do something
    

    通过使用我的文件到类名命名约定,我可以简单地使用Windows资源管理器来了解类的作用、它在模型/视图/控制器模式中的位置/角色等。

            ABCSiteCore\
             Model\
              MssgSys\
               Rules\
                Customer\
                 HasCustomerBeenSentNotificationOfOnlineTransactionPaymentByEmail.php
    

    每当我想到一个域概念的名称时,我就养成了将潜在的路径长度粘贴到 路径长度检查器 '要查看我是否可以使用它-它只是我的工作笔记wiki中预先格式化的文本的一部分:

    如你所见。不幸的是,类名接近极限

    C:\_my\websrv\ABCCoUkHosting2\webserve\my_library\vendor\ABCSiteCore-6-2\ABCSiteCore\Model\MssgSys\Rules\Customer\hasCustomerBeenSentNotificationOfOnlineTransactionPaymentByEmail.php
    
    -------------------------------------------------------------------------------------------------------------------------------------------------------------------script path length danger zone------->|
    
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------max path length danger zone (inclusive .svn folder)------->|
    
    C:\_my\websrv\ABCCoUkHosting2\webserve\my_library\vendor\ABCSiteCore-6-2\ABCSiteCore\Model\MssgSys\Rules\Customer\.svn\text-base\hasCustomerBeenSentNotificationOfOnlineTransactionPaymentByEmail.php.svn-base
    

    由于这些路径长度限制,我倾向于为我的实体选择不最适合我的域模型中无处不在的语言的名称。这有时会导致对系统如何工作的误解,导致混乱,增加复杂性,使开发更加困难。

    所以:

    • 我如何解决这个问题?
    • 它是可解的还是这只是一个 那些实际限制我们 一切都要处理?
    • 这只是个人电脑吗?可能是时候切换到Mac或Linux了。
    2 回复  |  直到 15 年前
        1
  •  4
  •   nathan    16 年前

    这里有一些抽象的建议可以帮助您;是的,切换操作系统,但不是您的想法-获取 virtualbox 加载到Linux版本中(Ubuntu的nice和quick+支持良好),然后使用该虚拟操作系统作为开发操作系统-这样您就可以充分利用这两个世界,当您完成工作后,只需关闭虚拟机(如果您愿意,保存它的状态),并拥有一台干净的好电脑来做您想做的事情。

    好处几乎是无限的,例如我有几个虚拟机,我可以随时加载,有些是测试设置,一些镜像Web服务器设置,我甚至有不同版本的Windows(如带有IE6的旧XP)来测试浏览器错误。

    令人惊讶的是,我发现我的机器在运转 更快 使用virtualbox;请不要让安装和运行的时间让您担心,因为virtualbox非常快,而且您会发现虚拟机的加载速度比主操作系统快得多。

    还有很多其他的好处,但总的来说,这是一次非常自由的经历:)

        2
  •  0
  •   Yaba    15 年前

    原因如下: http://svn.haxx.se/users/archive-2005-02/1088.shtml

    长短不一的是,如果你使用绝对路径 操作时,可以访问32K的路径长度。相对路径是 限制在~255。

    Subversion库使用相对路径。(我讨厌它,总是这样, 但那是一场战斗,我没有时间来发动。)那就是说,如果你吃了 颠覆绝对路径,嗯,相对于绝对路径的路径 他们自己还是绝对的,所以你 应该 好吧。还有,如果你 在窗户上用乌龟,你应该没事的,因为它总是 馈送颠覆绝对路径。

    如果你问我的话,这对于一个叫做操作系统的东西来说是很尴尬的。解决方法:使用Tortoise SVN。但是我不喜欢乌龟,因为它太慢了。