所以我有我认为是一个共同的困境。我有一个数据库对象,一个来自文档数据库的常规JS对象,然后我想将该对象发送给我的客户端。但是一些领域很敏感,不能向客户透露。声明式地将一个JSON对象放在Typescript中发送给客户端?
在C#世界,我只想用声明反光编程属性附加到我的C#对象,指明哪些场是客户消费,像这样的安全:
[SafeForClient]
string MyProperty { get; set; } // send to client.
string SecretData { get; set; } // Do NOT send to client.
然后我会使用反射收集所有[SafeForClient]
属性,构建我的JSON并将其发送到电线上。
尽管在JavaScript世界中没有这样的运气。在这个级别上没有声明式元编程。
我在打字稿像这样定义我的类型:
export type RoomForClient = {
id: number;
name: string;
description: string;
exits: {[index in Direction]?: Exit }
}
export type Room = RoomForClient & {
hiddenFlags: ScriptData;
}
所有,它使给客户端的房间的数据只是总房价数据的一个子集。目前,我有一个属性不应该被包含,这并不是那么糟糕......我可以很容易地从对象中删除这个属性。但在未来,当增加更多...我将被要求在两个地方添加这些属性名称;一次在Room
的定义中,并且一次在方法中实际减少。
如果我有一个“房间”对象,而没有手动指定所有应该或不应该复制的字段,我该如何创建一个“RoomForClient”对象?所有这些类型的信息都会在运行时被删除,所以我实在想不到在不违反DRY原则的情况下这样做的方法。我认为这是一种代码味道。
任何想法?