代码之家  ›  专栏  ›  技术社区  ›  airportyh

每个函数一个文件…真的吗?

  •  0
  • airportyh  · 技术社区  · 16 年前

    我对flex/actionscript比较陌生,但我一直在使用一种模式,即在我的Util包中为每个函数创建一个文件,文件名与函数名相同。就像文件是converttime.as:

    package util{
        public function convertTime(s:String):Date{
            ...
        }
    }
    

    这样,我可以通过执行以下操作轻松导入函数:

    import util.convertTime;
    ...
    convertTime(...);
    

    我更喜欢这种方式,而不是导入一个类对象,然后调用挂起它的静态方法,如下所示:

    import util.Util;
    ...
    Util.convertTime(...);
    

    但是,我做得越多,最终得到的文件就越多,而且在一个文件中只放一个函数似乎有点浪费/愚蠢,特别是当函数很小的时候。还有别的选择吗?还是只有这两个选择?

    更新:经过一些研究,我也在下面发布了我自己的答案。

    3 回复  |  直到 16 年前
        1
  •  5
  •   Scotty Allen    16 年前

    是的,这是实用程序库的两个主要选项。实际上,我们将这两种方法都用于通用实用程序函数。对于我们认为应该内置的一组非常小的函数(如map()),我们为每个文件放置一个函数,这样我们就可以直接使用该函数。

    对于更模糊/专用的实用程序函数,我们不希望污染全局命名空间,因此我们将它们设置为实用程序类上的静态函数。这样,我们可以确定当有人引用arrayUtils.intersect()时,我们知道什么library intersect()来自什么,以及它的大致用途(它与两个数组相交)。

    我建议尽可能采用后一种路线,除非您具有a)非常频繁使用的功能和b)一目了然的功能。

        2
  •  3
  •   airportyh    16 年前

    毕竟我遇到了一些其他的选择,我想在这里分享。

    备选方案1-使用继承

    这可能是一个显而易见的答案,但也是有限的。您可以将静态方法放入父类中,继承它们以将它们放入子类中。这只适用于类。另外,由于actionscript是单继承的,所以只能继承一次。

    备选方案2-对方法进行别名

    您仍然可以将实用程序函数作为挂起Util类的静态方法编写,但是您可以对它们进行别名,以便使用较短的名称访问它们,例如:

    import mx.binding.utils.BindingUtils;
    var bind:Function = BindingUtils.bindProperty;
    

    现在你可以打电话了

    bind(...);
    

    而不是冗长的

    BindingUtils.bindProperty(...);
    

    您可以在类范围和函数范围内执行此操作,但不能在包范围内执行此操作,因为显然,在包内只能有一个可见属性。如果在类作用域中执行此操作,则需要确保它不会与其他类属性名称冲突。

    备选方案3-使用包括

    如上所述 this flexonrails blog post 你可以使用 包括 以模拟ActionScript中的混合。安 include 与导入不同的是,它所做的只是复制包含的整个文件,并将其粘贴到包含该文件的位置。因此,它完全没有处理名称空间问题,您不能像处理导入那样在后面引用它的完整路径名,如果您有冲突的名称,您可以自己处理这个问题。与导入不同的是,它创建同一代码的不同副本。但你是什么 可以 这样做是将任意数量的函数放在一个文件中,并将它们包含到另一个文件中的类或函数范围中。前任:

    // util/time_utils.as
    function convertTime(..){
       ...
    }
    function convertDate(..){
       ...
    }
    

    包括:

    include 'util/time_util.as';  // this is always a relative path
    ...
    convertTime(...);
    
        3
  •  0
  •   Bryan Grezeszak    16 年前

    @匿名

    OOP只是将类似的函数或属性合并到可以导入和使用的对象中的方法。你的代码只是一种组织形式,所有的代码最终都在处理器中按程序执行,OOP只是源代码的组织。他在这里的所作所为也许不像你从一本书中学到的那样糟糕,但它最终做了完全相同的事情,应该受到同样的尊重。

    任何真正了解OOP的人都不会幼稚到认为OOP的已批准和文档化形式是实现代码定向的唯一可能方法。

    编辑:这应该是一个评论回应安尼姆的粗鲁评论,告诉他学习OOP。但我想我打错了:)

    推荐文章