不用盲目追求面向对象,面向对象适合很多现实逻辑,但不代表适合所有逻辑
很明显,你用了类,你用了对象,你用的东西是面向对象的,但你自己写的东西是面向过程的
用组合模式封装,将DataInfo与BLL.Data与DAL.Data集成,形成一个逻辑处理类,但感觉与MVC模式背离

解决方案 »

  1.   

    其实petshop的模式有的地方是面向对象的,有的地方不是。换句话说,不能称之为面向对象。
    1、数据库的设计,既然是数据库,他的设计方法就和面向对象设计相背离的。
    2、petshop把一些数据表映射成了实体类,其实这也只是考虑了业务逻辑而已。
    3、并不是说有了强类型、泛型集合、DBHelper.cs、UserInfo、BLL.User就是面向对象的,没有了就不是面向对象的,面向对象是一种思想,不是流程。面向对象包括面向对象的设计,面向对象的编码。
    4、分层!=面向对象。
      

  2.   

    PetShop之类的只是分层而已。和面向对象没有多大关系网页基本上就是接受请求返回数据。只有在复杂的winform程序里才能体会到面向对象的伟大
      

  3.   

    听高手说B/S和C/S的区别只是客户端不同,其他都是一样的。
      

  4.   

    virusplayer 说的实在 !!!
    是应该好好的学学!
      

  5.   

    编程里,把什么都看成对象,甚至是变量。比如说猫类在动物界是一种类型,而对象就相当于这个猫类中的某一只猫,例如cat这只猫,就是猫类的这个类型的一个对象.
      

  6.   

    打个比方,让你编一个计算正方形的程序,一般的思路是: 
    定义3个变量,a=长,b=宽,c=a*b 
    而面向对象的思路: 
    先创建一个长方形的类,在类里定义两个属性分别为长、宽,再定义一个面积方法 
    然后实例化这个类
      

  7.   

    你这样的例子没用!比如说我做一个网站,而这个网站里有个计算正方形面积的功能,我完全可以像你说的用一个Square类来表示正方形,长、宽是属性,计算面积是方法,然后我从保存“形状”的数据表中取出一个正方形,然后通过Square类计算它的面积,然后返回到网站的用户界面上显示面积的结果。这跟我说的网站设计的那个流程有什么区别?从宏观角度来说,也是数据的提交和回送。只不过是多了一个用“类”来表示对象的方式,任何初学者完全都可以用你这样的思路来设计,但是照样被人指成是“面向过程”。
      

  8.   

    看来你真的没明白对象。从结果来看任何程序都是过程的,因为从数据输入-查找运算-显示结果肯定是一个具体的过程。对象实际上一种编程思想,而并非啥Bil,Dal层,那个是对象的结果而已。实际对象说穿了就是封装变化和类重用。而不是啥3层N层。
      

  9.   

    比方说我做一个工资管理系统,我要通过一些参数来计算出员工的最终工资。那么我就做一个工资类,然后在里面放一个通过各种参数来计算工资的方法,需要调用的时候就实例化工资类,然后调用这个工资计算方法,我肯定不会在Page_load中一行一行那样从上向下一直写下来。也就是说,我采用的方法跟你采用的方法是一致的,你觉得那里有问题?
      

  10.   

    如果,你明白上面说的封装变化和类重用这两点的话,你就算明白对象了这也是为什么新手写东西常常被认为是过程原因,虽然从语言层面上看他们也用object,也继承,也封装,也多态。但是他们不明白变化点在那里,他们做不到类重用。呵呵,对象实际不适合新手,只有有经验的人才明白在项目里那些是公用的,那些是变化的。对象存在的目的只有一条---防止变化,应对变化,以达到代码复用,让程序员不再重复劳动(呵呵,老油条定义就是有经验而且会偷懒)
      

  11.   

    你这样想还是面向过程的想法,面向对象说穿了就像 wanghui0380 说的那样就是封装变化和类重用。
    举个例子来说吧,你要在网站增加个log功能,如果你是已面向过程的想法可能就是这样public class Log
    {
       public void Write(string loginfo)
       {
         //具体的实现,假如说是写入到数据库中
       }
    }然后你就在各个需要用到log功能的地方增加
    Log log = new Log();
    log.Write("信息1");
    你看看,这段代码中有class吧,也解决了实际的问题了,但你这就是面向对象了吗?
    这时候项目要求变化了,要将原来要存入数据库中改为存入文件中,你就会发现需要修改代码了,不过简单!将Log中的Write修改一下就可以了。
    接着项目需求又变了,Log有的地方要存到数据库中,有的地方要存入文件中,又要改代码了,怎么改呢,像这样改?public class Log
    {
       public void WriteDataBase(string loginfo)
       {
         //具体的实现,假如说是写入到数据库中
       }
       public void WriteFile(string loginfo)
       {
       //具体的实现,假如说是写入文件中
       }
    }你会发现噩梦来了,你需要修改散落在项目中成千上万个调用的代码,即使你修改好了,那以后呢?需求又变化了呢?
    你会想为什么会出现这样的问题,我不是也使用了对象了吗?甚至我的项目也使用到了分层了呀?难道不是面向对象吗?
    没错,你是使用了这些时髦的技术,什么反射啊,分层啊,封装、继承、多态你都很熟悉,但你的思路仍然处在面向过程之中,你只是以面向过程的思路来解决问题而已
      

  12.   

    非常感谢[一水寒]的指点。你的讲解给我的第一印象是,需求无限的变化,而我们要考虑未来的变化来设计现在的东西。是啊,怎么办呢?如果未来有100种需求,难道我们现在就要事先想好所有的变化吗?对于这方面您有什么好的想法?我现在只能通过无限修改代码的方式来解决这个问题,比如说,有一张表,你通过子查询的方式可以有千变万化的View,用户今天要一个View,我加一个,明天又要另一个View,我又加一个。目前为止,我只能这样做了。也非常感谢[放歌]说了那么多经验,我好像有点茅塞顿开,但只是略微的,可能需要经过几次实践才能领悟。你说出了[一水寒]那个问题的答案,不,是一个思路——留出了变化空间。呵呵,可能我有点贪婪,我迫切的想知道如何留出变化的空间。
      

  13.   

    这要说明清楚的话没一本书是说不完的,楼主可以看看设计模式这本书,就是在说明这个问题。
    OO设计要遵循5大原则:
    1、开闭原则(OCP);
    2、里氏替换原则(LSP);
    3、单一职责原则(SRP);
    4、依赖关系倒置原则(DIP);
    5、接口隔离原则(ISP)
    这些网上大把的文章来说明,
      

  14.   

    SkyIsland 
    如果需求一直在改,项目有可能会做死,这就是为什么项目成功率不高的原因,主要原因就是客户需求不断变化,而设计人员设计的系统不足以承受这种变化。//
    开闭原则说,不能直接在具体类上修改,但可以继承抽象类或实现接口,但是继承抽象类或实现接口不也是要添加代码吗,如果需求无止境的改变,那我不是要无止境的继承,无止境的实现接口?
    //开闭原则不是说不添加代码,而是不对以前的代码再做修改,在已有的类和接口上实现。
    如果需求无止境的改变,那么你只需要实现必要的接口或者继承抽象类。至于说需求一直改变,甚至改变到和原来的项目一丝边都不挨的时候,恭喜你,你的项目失败了,重新设计,因为这是另外一个项目了。楼上机会说的需求改变,开闭原则都是在一个产品可以改变的范围内,比如工资计算方式变了,比如什么什么的,而你忽然增加了N个风牛马不相及的东西,能一样吗?
      

  15.   

    感觉你们经理需要明白一点:
    面向对象并不是解决问题的唯一方法,而且在很多情况下也并不是最好的方法。
    万物变化,自有其特点,想一切都OO,那就会over。
      

  16.   

    无论是C++、C#、Java的“this”、Delphi中的“Self”、VB.NET中的“Me”
    这些为面向对象而设计的语言都少不了“自己”这个概念
    当然“自己”也是要被抽象的,所以也都少不了“class”
    思考问题的方法不限于某个领域更不限于某种语言,哪怕是用汇编也能实现面向对象的开发。
      

  17.   

    OO的核心是抽象
    所谓的类,顾名思义就可以知道是个抽象的概念
    一定要弄明白多态的概念,真能真正理解OO
    而封装与继承只要智商不是太低很容易理解~
      

  18.   

    看看哲学方面的书,世界观...
    建议看书《C# OBJECT从概念到代码》