飞镖 - 需要解释图书馆/部分和导入/导出

时间:2017-06-11 03:10:22

标签: dart

是的,我看过dart import and part of directives in same file

我有这个结构:

  • LIB /
    • 的src /
      • 一个/
        • SomeClass.dart
        • one.dart
    • mylib.dart
  • main.dart

我正试图实现这种行为:

  1. 所有公共和隐藏变量都可以在库中完全访问。
  2. main.dart可以访问库中的所有公共变量。
  3. 有一个问题。由于一些奇怪的原因,我不能使用任何指令'part of'。所以我不能在one.dart

    中使用它
    part of mylib;
    import 'SomeClass.dart';
    
    //somecode
    

    所以我要么需要将类定义从SomeClass.dart移到one.dart(这会使代码的可读性和混淆性降低),或者我需要在mylib.dart中移动'import'

    library mylib;
    import 'SomeClass.dart';
    part ..
    

    我不喜欢其中任何一个选项。在第二种情况下,我将需要解析所有模块然后移动导入/导出。这肯定会破坏一些东西。

    这可能听起来很奇怪,但该项目将自动从各种模块构建。 one/就是其中之一。

    这个应用程序设计很糟糕,我知道。但要么我需要找到更好的方法,要么只是公开所有变量,不要打扰。

2 个答案:

答案 0 :(得分:2)

默认为每个文件定义一种类型,不使用part,并仅导入所需的文件。这涵盖了大多数用例。

现在,我们假设您有两种常用的类型 - 例如ThingThingException,当Thing做坏事时会被抛出。在任何地方导入这两个文件都很繁琐,因此您有三个选项可以自行权衡:

  1. 在同一文件中声明两种类型
  2. 在自己的文件中声明每种类型,并拥有' primary'文件导出另一个。因此,thing.dart导出thing_exception.dart。导入thing.dart使导入文件可以访问两者。
  3. 在自己的文件中声明每个类型,并让另一个文件成为'的一部分。主文件。因此,thing_exception.dart声明它是'的一部分。 thing.dart。导入thing.dart使导入文件可以访问这两个文件。
  4. 对于这种简单类型及其例外,最好的选择是使用选项1.当代码量增加或两种类型的可见性不同时,此选项变得不那么有吸引力。这将选项2和3放在桌面上。

    如果您有单独的文件,选项2通常是比选项3更好的方法,因为您保持一定的灵活性 - 您只能 导入thing_exception.dart而不是thing.dart。如果您使用选项3,则无法执行此操作 - 您要么导入所有部件,要么不导入任何部件。这是您在尝试执行零件并在同一文件中导入时看到的错误。

    当您在两个文件中的代码高度依赖于彼此并且他们需要能够访问彼此的私有成员时,选项3变得有价值。这种情况不常见。

    当你有一堆这样的文件时,它就变成了一个'库'在更传统的意义上。您声明导出文件的主库文件(您的my lib.dart文件):

    export 'public.dart';
    export 'other_public.dart';
    

    bin脚本整体导入了库,但它无法看到任何未从my_lib.dart显式导出的内容。

    import 'package:mylib/mylib.dart';
    

    Here's an example of a smallish package将所有这三个选项结合使用,以便提供良好的参考。

答案 1 :(得分:0)

我认为使用importexport show会更好。 (现在不鼓励使用part of。)

此问题的答案可能会对您有所帮助:When to use part/part of versus import/export in Dart?

创建库包文档:https://www.dartlang.org/guides/libraries/create-library-packages