将类作为数据记录处理时,Dart 的最佳实践是什么?
详细说明:在编写应用程序时,很可能会为表格行创建一个类。如在
class Item { int itemid, String itemName, double score }
Item item = new Item();
这允许编译时捕获 Dart 中的任何拼写错误等。(与使用依赖于 NoSuchMethod 的类不同。)
它还需要一个相应的字符串结构来绑定到 HTML,例如
<input id="itemname" type="text" bind-value="itemEdit.itemName">
所以飞镖将是:
class ItemEdit { String itemId, String itemName, String score }
ItemEdit itemEdit = new ItemEdit();
接下来我们需要一种从一个到另一个的方法,所以我们给 Item 添加一个方法
fromStrings(ItemEdit ie) {
itemid = ie.itemId == null ? null : int.parse(ie.itemId);
itemName = ie.ItemName;
score = ie.score == null ? null : double.parse(ie.score);
}
反之亦然:
toStrings(ItemEdit ie) {
ie.itemid = itemId == null ? '' : ie.itemId.toString();
ie. itemName = itemName == null ? '' : itemname; // Web_ui objects to nulls
ie.score = score == null ? null : score.toStringAsFixed(2);
}
另外,我们从数据库中获取 jason 数据,所以我们需要在 Item 中添加另一个方法:
fromJson(final String j) {
Map v = JSON.parse(j);
itemid = v['itemid'];
itemname = v['itemname'];
score = v['score'];
}
我们需要能够恢复为默认值:
setDefaults() { itemId = 0; itemName = "New item"; score = 0; }
这种冗长让我觉得我又在写 COBOL 了!
这里缺少一些基本的东西——无论是在我的理解中,还是在 Dart/WebUI 库中。
我想写的是
class Item extends DataRecord {
int itemid = 0,
String itemName = 'New item',
double score = 0.0;
}
然后,无需进一步编码,就可以编写诸如
item.toStrings();
...
item.fromStrings();
...
item.fromJson(json);
...
item.setDefaults(); // results in {0,'New item',0.0}
并且能够在 HTML 中编写:
value="{{item.strings.score}}"
如果这是可能的,它会比我现在编写的代码更快、更简单、更清晰、更不容易出错。