我已经编写并测试了相当多的相关类集,以实现Angular预算应用程序背后的“模型”。该模型删除了在字段,行,帐户等之间的预算范围内实现的所有业务规则和关系,因此Angular组件只能专注于用户体验。
我有许多类(简化的),类似于下面的示例-大约35个类,由对象和集合组成,它们在两个方向上都保持父子关系,这对于维护总体预算状况很重要。
我在Karma / Jasmine中编写了许多单元测试,以分别测试组件,并确保所有功能均按预期工作,并测试了各种对象之间的交互。所有150项测试均通过,并且Karma / Jasminie不会产生任何错误或警告。
但是,当我将此对象图集成到我的Angular应用程序中时,我得到了很多
WARNING in Circular dependency detected
。因为这些父级和子级中的一些复杂且与图中的几个不同对象相互作用,并且我已经在不同文件中定义了这些类,所以这意味着父级对象需要导入子级,反之亦然。
尝试重构所有这些工作以消除警告或只是忽略警告是否有意义,因为可以预期这些类都是同一对象图的一部分,并在很大程度上出于可维护性和目的而拆分为单独的文件可读性?
//name_value.ts
import {NameValues} from "name_values";
export class NameValue {
private _value: number;
private _name: string;
private _parent: NameValues;
constructor(name: string, value: number, parent: NameValues) {
this._name = name;
this._value = value;
this._parent = parent;
}
get value() {
return this._value;
}
set value(newValue: number) {
let oldValue = this._value;
this._value = newValue;
this._parent.notify("ValueChangeEvent", oldValue, newValue);
}
}
//name_values.ts
import {NameValue} from "./name_value"
export class NameValues {
private _map: Map<string, number>
private _total: number = 0;
constructor() {
this._map = new Map();
}
add(name: string, value: number) : NameValue{
let newNameValue = new NameValue(name, value, this);
this._total += value;
return newNameValue;
}
notify(eventName: string, oldValue: number, newValue: number) {
this._total += (newValue - oldValue);
}
get total(): number {
return this._total;
}
}