C#富文本解析器的命名空间与类命名设计疑问咨询
针对你的两个技术疑问,给出实际开发中的建议:
1. Smurf命名与通用类型名的选择
如果要保留公共API并支持跨项目复用,不建议直接使用TokenType、Reader这类无前缀的通用名称。C#生态中,公共API的通用类型名极易与其他库或系统类型产生冲突,即便放在Poeoquito.Text.Parsing命名空间下,用户同时引用多个解析库时仍可能出现命名歧义。
两种可行方案:
- 保留
Rich前缀(即Smurf命名):比如RichTokenType、RichReader,这种方式直观,能明确标识属于富文本解析体系,避免冲突,适合公共API场景。 - 依托子命名空间隔离:将解析相关类型放到
Poeoquito.Text.Parsing下,直接使用TokenType、Reader,用户通过命名空间限定(using Poeoquito.Text.Parsing;)或完整名称引用即可,这和System.Text.Json的设计思路一致,既简洁又能避免冲突。
如果后续确定解析库仅作为内部API使用,直接用简洁的通用名称完全没问题,无需考虑外部冲突。
2. 命名空间层级的合理性
当前Text下划分Parsing和Formatting子命名空间的设计合理且清晰:
Parsing专注于类HTML文本的分词、解析,生成RichDocument、RichNode等中间结构,职责单一;Formatting负责将中间结构转换为可渲染的字形、文本运行,与解析逻辑完全解耦;- 顶层的
RichText、TextStyle作为对外暴露的核心类型,与底层解析、格式化逻辑分层明确,用户无需关心内部实现,只需关注最终的富文本对象。
这种划分不属于过度复杂,反而能让代码边界更清晰,后续扩展解析规则、新增格式化逻辑时,便于维护和复用。
内容的提问来源于stack exchange,提问作者lumpalette




