1、数据层和应用层不符合高内聚低耦合的规则导致项目出现依赖循环引用。
Form依赖comprocess文件中的BuildFrame将数据封装放入发送队列SendList中;ReceiveDataProcess接收数据后依赖Form文件更新UI;comprocess则依赖ReceiveDataProcess处理接收到的数据并利用Form更新。可以考虑修改的地方是comprocess中的BuildFrame作为BuildFrame类分别放在Form的项目中。
2、struct和class的区别
*值类型在内存的一个地方(称为堆栈)存储它们自己和它们的内存;
*引用类型在内存的一个地方(称为堆)存储一个引用,而在另一个地方存储内容。
在选择struct和class类型时基于程序中对实例的复制是深度复制还是引用,就DA系列而言,需要考虑实例时AMddr和DSPddr,最好能在实例化时利用自定义的构造函数对AMddr和DSPddr赋值,减少BuildFrame时不必要的麻烦和出错的概率。
例如:
[StructLayoutAttribute(LayoutKind.Sequential)]
public class AMInfoEQGet
{
public PresetInfo presetInfo;
public AMInfo amInfo = new AMInfo();
public AMInfoEQGet(byte Chn, byte eqIndex)
{
switch (Chn)
{
case commDeclare.AMI_PEQ_OUT1:
amInfo.Addr = (ushort)(24 + 12 * eqIndex);
break;
case commDeclare.AMI_PEQ_OUT2:
amInfo.Addr=(ushort)(144 + 12*eqIndex);
break;
}
amInfo.DataSize = 12;
amInfo.DspDataOffset = 5;
}
}
措施:必要时改变实例化的过程(构造函数)和修改BuildFrame引入的参数。
3、EQ和HLP
深入了解EQ和HLP的控制和如何画相应的曲线。
4、利用XML作为PC存档
序列化对象再保存,反序列化读取。以及LINQ语法的入门。