Angular项目中组件需实现的通用接口应存放于哪个目录
Angular 跨模块通用组件行为接口存放方案
你的判断是对的,models目录不适合存放这类接口。models的核心定位是存放纯数据结构定义:比如接口返回的DTO、业务实体类型、表单数据类型这类只描述数据形状、不涉及组件/服务行为约定的类型,把定义组件公共方法的契约放这里会混淆目录语义,后期维护找文件的成本会很高。
结合你现有的目录结构,按复用范围选存放位置即可:
方案1(最匹配你当前场景):放在backend域的shared目录下
你这个接口是backend下所有业务模块(users、roles、后续要加的activity-logs、branches)的组件都要实现的公共契约,属于backend域内跨模块复用的资源,完全符合backend/shared目录的定位。
- 直接在
backend/shared下新建contracts(或interfaces)子目录专门存放这类行为契约即可,调整后的目录片段参考:
├───backend │ ├───shared │ │ ├───contracts // 新增:存放backend域跨模块复用的行为类接口 │ │ │ └───paginated-component.interface.ts // 你写的含分页等公共方法的接口 │ │ ├───active-status-button │ │ ├───bg │ │ ├───create-button │ │ │ └───create-button-directive │ │ ├───dual-auth │ │ │ └───dual-auth-modal │ │ └───modal
- 命名建议:这类供组件实现的接口统一用
.interface.ts后缀,文件名直接体现契约能力,比如包含分页、列表加载通用方法的接口直接叫paginated-component.interface.ts,看文件名就知道用途。
方案2(后续扩展用):全局复用的契约放根shared目录
如果后续这类接口不止给backend域的组件用,frontend域的组件也需要实现,就把它移到根目录的shared目录下,同样新建contracts子目录存放,和你现在根shared下放的跨域通用组件(dropdown、input-field-error、loading-spinner)平级即可,定位是全应用级别的共享契约。
几个落地的注意点
- 只有跨2个及以上模块复用的接口才往shared目录放,如果是单个模块内部用、不会给其他模块调用的组件接口,直接放在对应模块的目录下就行,不要过度抽象
- 这类契约接口里只写方法签名、属性类型定义,不要掺杂任何具体实现逻辑,保持纯类型约束的定位
- 不要把行为类接口和数据模型混放,坚持时间长了整个目录的职责会非常清晰,不管是老功能迭代还是新人接手,找文件不用猜位置
补充:Angular官方风格指南没有对这类文件的存放做强制要求,核心原则就是按文件的作用域、复用范围归位,同域共享的资源归对应域的shared,全局共享的资源归根shared,数据定义归models,行为契约单独归类就不会出问题。
内容的提问来源于stack exchange,提问作者CodeR_Ax20
相关产品推荐
相关产品推荐

