来自前端备忘录 - 江湖术士[1]领域驱动,各自只管各自的模块,顶层再来进行组装和分配
https://hqwuzhaoyi.github.io/2021/01/14/74.HookDDD/
- 坚持根据特性区命名目录 。
- 坚持为每个特性区创建一个 NgModule 。能提供限界上下文,将某些功能牢牢地锁在一个地方,开发某个功能时,只需要关心这个模块就够了 。
function SomeComponent() { const someService = useService(); return <div>{someService.state}</div>;}跨组件数据传递?function useGlobalService() { return { state: "" };}const GlobalService = createContext(null);function SomeComponent() { return ( <GlobalService.Provider value=https://www.isolves.com/it/cxkf/jiagou/2021-06-25/{useGlobalService()}> );}function useSomeService() { const globalService = useContext(GlobalService); return <div>{globalService.state}</div>;}上下文注入节点,本身就是按照试图来的函数 DDD只用函数实现 DDD,它有多优美
我们先比较一下这两种写法,对于一个类:
class SomeClass { name:string, password:string, constructor(name,password){ this.name = name this.password = password }}const initValue = { name: "", password: "" };function useClass() { const [state, setState] = useState(initValue); return { state, setState };}下面的自带响应式,getter,setter 也自动给出了,同时使用了工厂模式,不需要了解函数内部的逻辑 。生命周期复用每个 useFunc 都是 拆掉 的管道函数,框架帮你组装,简直就是一步到位!
效率
function useSomeService() { const [form] = useForm(); const request = useRequest(); const model = useModel(); useEffect(() => { form.onFieldsChange = () => { request.run(form.getFieldsValue); }; }, [form]); return { model, form, };}<Form form={someService.form}> <Form.Item name="xxx" label="xxx"> <!-- 没你service啥事了!别看!这里是纯视图 --> </Form.Item></Form>【前端架构之 React 领域驱动设计】这个表单服务你想要在哪控制?想要多个组件同时控制?
加个 token,也就是 createContext,把依赖提上去!
他特么自然了!
React Hooks 版本架构执行 LIFT 原则
- 顶层文件夹最多包含:assets,pages,layouts,App 四个(其中 pages,layouts 是为了照顾某些 ssr 开发栈),名字可以变更,但是不可以有多余文件夹,激进的话可以只有一个 app 文件夹
- 按功能划分文件夹,每个功能只能包含以下四种文件:Xxx.less, Xxx.tsx, useXxx.ts,useXxx.spec.ts , 采用嵌套结构组织
- 一个文件夹包含该领域内所有逻辑(视图,样式,测试,状态,接口),禁止将逻辑放置于文件夹以外
- 如果需要由其他功能调用,利用 SOA 反转为何如此?
- 功能结构即文件结构,开发人员可以快速定位代码,扫一眼就能知道每个文件代表什么,目录尽可能保持扁平,既没有重复也没有多余的名字
- 当有很多文件时(例如 10 个以上),在专用目录型结构中定位它们会比在扁平结构中更容易
- 惰性加载可路由的功能变得更容易
- 隔离、测试和复用特性更容易
- 管理上,相关领域文件夹可以分配给专人,开发效率高,可追责和计量工作量,很明显应该禁止多人同时操作同一层级文件
- 只需要对 useXxx 进行测试,测试复杂度,工作量都很小,视图测试交给 e2e
命名格式为
推荐阅读
- Web安全之URL跳转漏洞
- Linux之kali修改ssh服务配置文件允许root用户远程登录
- Data Mesh的原则和逻辑架构
- 动物之森气球上的礼物怎么拿 动森怎么打气球礼物
- 2021年前端编程发展趋势
- 不惑之年是多少岁?
- 在汜水关之战中被当时默默无名的关羽斩杀的猛将是?,关羽在汜水关斩的大将
- 项羽为什么在楚汉之中会失败,楚汉相争为什么项羽会输
- 李诵在位时间,唐肃宗李亨之后是谁继位
- 丰臣秀吉之后是谁?丰臣秀吉是谁的家臣
