我在做个进销存系统 用三层架构
实体层
往来单位(抽象类)
客户、代理商、供应商 这三个类都继承于 往来单位
业务层
往来单位(抽象类) 其中有一个方法
public abstract int add(mod.往来单位 modwldw);
然后 客户、代理商、供应商都继承至 往来单位 这个类,其中实现我以客户类举例
客户:public override int add(mod.客户 modekehu){}
代理商:public override int add(mod.代理商 moddaili){}
注意 抽象类和实现类中方法的参数,我理解的是 既然我在 实体层已经 说明了 客户 代理商 供应商 都是 往来单位的 子类,那么我在传递参数的时候 以子类代替基类应该没问题啊,在编译的时候报错了。
我自己觉得这样做很符合逻辑,为什么不行呢?我该怎么理解啊?
还有个问题就是 在设计 商品 类的时候有点问题
商品
普通商品 设备
监控设备 打印设备 电脑及耗材
商品分为普通商品和设备,设备又分很多种,我这里应该用继承吗?如果用 那么如果 监控设备下面 又有下级分类 难道我一直继承下去。感觉不合理。。该怎么合适的使用继承呢?
还有个问题,做进销存肯定会 遇到 客户 订单 商品 什么的,这些东西 要提出抽象类很容易,就比如说前面问题中提到的 往来单位 客户 供应商 代理商 什么的。往来单位肯定是抽象类,想知道这种抽象关系怎么运用,用在业务逻辑层? 实体层? 怎么处理哦? 说简单点如果实体层不用抽象, 那 客户 供应商 代理商 都有编号 名称 地址 联系人等等相同的属性 难道各自分开写?
我在传递参数的时候 以子类代替基类应该没问题啊,在编译的时候报错了
C#中override一个abstract方法,必须要保证签名相同,你用子类做参数违反了这个原则。还有就是我假设你的代码已经写好了(那么不如意外你想象中的客户类应该是下面这样):
class Client : //先不管它从哪个类继承 { public int Add(Client client) { //也不管它的返回值是什么 } }
这个add方法的含义是什么?在客户类中,add一个它自身到它自身?那么这个client类是否更像是一个client列表而不是单个client?
Client clientA = new Client(); Client clientB = new Client(); clientA.Add(clientB); //现在clientA到底代表什么意义?clientA? clientB? 两者的集合?
如果你的回答是clientA,那么clientB被add到哪里去了?如果答案是B那么A哪里去了?如果是两者的集合,为什么2个client被作为了1个Client对象的实例?按照面向对象的思想,一个Client的实例应该在任何时候都表示1个client,而不能经常改变它的业务逻辑含义。
呵呵,这个问题问了无数遍了,只有伱听懂了我的意思,但是不全,你的第一句我理解到了。“C#中override一个abstract方法,必须要保证签名相同” 后面你给的例子中没理解, class client是指的Bll层中的 client 而 add方法中的参数 client 指的 实体层 model中的 client。如果是你来做这个你会怎么做? model层 写3个类 客户 代理商 供应商。 然后 Bll层也写这三个类,并写增 删 改 查的方法? 但是这里3个类明明就可以 抽象出 往来单位 这个类,为什么不能应用进去了? 客户 代理商 供应商 都有 编号 名称 地址 电话 联系人等等属性啊。 分别各写各的好不舒服。 如果 抽象来做。。 实体层怎么处理? 业务逻辑层又怎么处理? 实在费解~! 望大哥指点~!
如果你繼承了,抽象類,那麼裏面 要重新寫抽象的方法。參數也一樣。
再調用的時候,參數里可以賦值,繼承對象。
老哥 没认真读我的问题哦。。
老哥 没认真读我的问题哦。。单说 实体层, 有 客户类 供应商类 代理商类,这3个类都有共同的属性 编号 名称 地址 联系人 电话等等。。 所以我抽象出一个 抽象类 叫 往来单位,
在实体层 我写一个 抽象类 叫 往来单位 然后 供应商 客户 代理商 这三个类都 继承至 往来单位这个类 这样合理吗? 实际开发中 大家也会这样做抽象吗? 在业务逻辑层 要不要也要做这样的抽象,然后在抽象类中 写 增 删 改插这样的操作,然后在子类中 实现这些方法,但是这里的参数如何处理? 你说的 里面要重新写 抽象方法? 比如我 业务层 中 客户这个类 已经是 是 往来单位的 子类了。他应该要去 实现 往来单位类 中的方法,怎么还去抽象呢?
@jionsoft: 抽象 是為了統一調用。實現 還是 要具體實現的。
@無限遐想: 问题就是这里,抽象中 定义了方法,其中指明一个参数 mod.往来单位
实现类中 应该要去实现抽象类中的方法, 但是这里参数 是用 mod.往来单位 还是用 mod.客户 呢?
如果用 mod.客户 会报错,如果有 mod.往来单位 那么 参数 "点不出" 客户独有的属性。怎么解决呢?
@jionsoft: 是往來 單位
這個 你需要進行轉換的。