【问题标题】:Common Package instead of Library in Dart?Dart 中的通用包而不是库?
【发布时间】:2019-09-02 05:35:41
【问题描述】:

我在不同的 dart 项目之间共享了一些模型类。

选项 1

首先,我按照 dart 库的约定进行了以下操作:

在导入通用库/包的项目/包中:

  • pubspec.yaml:
dependencies:
  mycommon:
    path: ../mycommon
  • some_class.dart:
import 'package:mycommon/models.dart';

通用库/包:

  • pubspec.yaml
name: mycommon
  • lib/src/model/model_1.dart

  • lib/src/model/model_2.dart

  • ...

  • lib/src/model/model_50.dart

  • lib/models.dart:

library mycommon;

export 'src/model/model_1.dart';
export 'src/model/model_2.dart';
...
export 'src/model/model_50.dart';

选项 2

将公共库视为普通包

在导入通用库/包的项目/包中:

  • pubspec.yaml:
dependencies:
  mycommon:
    path: ../mycommon
  • some_class.dart:
import 'package:mycommon/model/model_1.dart';

通用库/包:

  • pubspec.yaml
name: mycommon
  • lib/model/model_1.dart (无库关键字)

  • lib/model/model_2.dart

  • ...

  • lib/model/model_50.dart

我还没有找到使用 选项 2 的任何地方。这只是我自己想出来的。

我的问题很简单,是否推荐 选项 2 方式?我更喜欢使用 Option 2,因为我可以只导入我真正想要的类而不是所有内容。大多数时候,每个 dart 文件只需要一个类模型。

【问题讨论】:

  • (no library keyword at all. just a normal class) 这是什么意思?你从哪里想到给文件命名.class
  • @NateBosch 感谢您的回复。那只是一个错字。我现在更改了我的问题描述。

标签: dart


【解决方案1】:

lib/src/model/model_a.class 不是您应该用于 Dart 代码的文件名。该文件应该是lib/src/model/model_a.dart,不管它有什么类型的 Dart 代码。

使用lib/model/model_a.dart 并导入为package:mycommon/model/model_a.dart 完全没问题。 通常的情况是,一个包是用一个导入的库发布的,然后在lib/src 中实现详细信息,但这不是必需的。如果有一些单独有用的实现,将它们放在lib/src 之外并直接导入就可以了。

如果有很多这样的文件,或者如果通常需要一起导入一堆文件,我建议不要遵循该模式。 import 'package:mycommon/models.dart'; 将比每个单独模型的连续数十个导入要好得多。 Dart 不是 Java,您导入的每个类都不需要在它自己的库中。

【讨论】:

  • 您好,非常感谢您的回答。您的建议是基于通常需要为 dart 文件一起导入的一堆类。在我的问题中情况并非如此。对于一个 dart 文件,我只需要导入一个模型,但 lib 大约有 50 个模型。例如business_1.dart 只需要model_1.dartbusiness_2.dart 只需要model_2.dart 等等... 这种情况下,你还建议我将50 个模型一起导入business_1.dart 吗?谢谢。
  • 这取决于导入model_1.dartmodel_2.dart 还需要什么。如果business_1.dart 和其他一些代码 near 需要导入它,那么将它放在该文件旁边将是最有意义的。这让我觉得可能是一种组织代码的不寻常方式。一般来说,我通常不会尝试将“业务”代码放在一起,然后将“模型”代码放在其他地方。我会将所有_1 相关代码(业务、模型、视图等)彼此靠近。
  • 名称business 只是一个示例名称。我只是举了一个不好的例子,我想我应该把例子名称business改为view。此外,模型可以共享不同的项目,但不能共享视图。例如:在移动设备中,视图是颤振代码。在 web 中,视图是 angulardart。这就是为什么我需要创建一个单独的模型包库而不是“彼此靠近”。我想为许多不同的项目重用模型代码,而不是将它们放在一起。一切都是关于代码共享。如果这是一个单独的项目,我会将它们放在一起,但事实并非如此。
猜你喜欢
  • 2014-07-27
  • 1970-01-01
  • 2019-05-14
  • 2019-06-06
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 2014-01-10
相关资源
最近更新 更多