【问题标题】:Dart - Need explanation of library/part and import/exportDart - 需要解释库/零件和导入/导出
【发布时间】:2017-06-11 03:10:21
【问题描述】:

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

我有这个结构:

  • lib/
    • 源/
      • 一个/
        • SomeClass.dart
        • one.dart
    • mylib.dart
  • main.dart

我正在尝试实现这种行为:

  1. 所有公共和隐藏变量都可以在库中完全访问。
  2. main.dart 可以访问库中的所有公共变量。

有问题。出于某种奇怪的原因,我不能将任何指令与“部分”一起使用。所以我不能在one.dart中使用这个:

part of mylib;
import 'SomeClass.dart';

//somecode

所以我要么需要将类定义从 SomeClass.dart 移动到 one.dart(这会降低代码的可读性和混淆),要么我需要在 mylib.dart 中移动“导入”。

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

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

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

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

【问题讨论】:

    标签: dart


    【解决方案1】:

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

    现在,假设您有两种通常一起使用的类型 - 例如,ThingThingExceptionThing 做坏事时被抛出。随处导入这两个文件很繁琐,因此您可以选择三个选项来权衡:

    1. 在同一个文件中声明这两种类型
    2. 在自己的文件中声明每种类型,并让“主”文件导出另一个。所以,thing.dart 导出 thing_exception.dart。导入thing.dart 使导入文件可以访问两者。
    3. 在自己的文件中声明每种类型,并让另一个文件成为主文件的“一部分”。因此,thing_exception.dart 声明它是thing.dart 的“一部分”。导入thing.dart 使导入文件可以访问这两个文件。

    对于这种简单类型及其例外,最好的选择是使用选项 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 将所有这三个选项一起使用以获得良好的参考。

    【讨论】:

      【解决方案2】:

      我认为使用importexportshow 会带来更好的运气。 (现在不鼓励使用part of。)

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-05-24
        • 2018-04-15
        • 1970-01-01
        • 2016-05-29
        • 1970-01-01
        • 2022-08-17
        • 1970-01-01
        • 2020-03-27
        相关资源
        最近更新 更多