首先谢谢各位看官进来。我对设计模式并不精通,只是很浅显地看过一些书。对于降低对象间的耦合度,我很赞同。但是在实际编程中,对于对象解耦后的连接操作如何高效地完成还很困惑。例如:三个表,Sales,Product和Transactions。Sales包含SalesID和 SalesName字段,Product表中包含ProductID, ProductName, ProductPrice字段,Transaction表中包含TranID, Product表中包含TranactionID, SalesID, ProductID, TransactionDate, Quantity等字段很容易联想到创建Sales, Product和Transactions三个对象,并将各自的操作封装起来,降低耦合度。但是,往往我们需要通过SQL中类似JOIN的操作将表连接起来,例如:
SELECT * FROM Transaction
  INNER JOIN Sales ON Transaction.SalesID = Sales.SalesID
  INNER JOIn Product ON Transaction.ProductID = Product.ProductID
WHERE
  Transaction.TransactionDate > '...'
  AND Sales.SalesName LIKE '%...%'
  AND Product.ProductPrice < '...'那么,如何在程序上下文中,有效地通过Sales,Product和Transaction的对象的实例来获得相应的对象集合呢? 当然,获取所有记录,通过循环来遍历这种做法肯定很容易想到,但绝对不是高效之举,还望各位通道多多指教,谢谢

解决方案 »

  1.   

    不知楼主用的是Linq,EF,还是自己的框架?
      

  2.   

    谈不上框架。就比如,我只写了Sales,Product和Transaction这三个类,然后想通过上面SQL语句中的条件获得三个对象的实例集合(ArrayList或其他形式都可以),怎么样有效地获得这三组集合呢?或者用其他思路来完成?总之在此例中最终想得到的是符合条件的Transaction和与其相关的Sales,Product信息
      

  3.   

    最直接的方法当然都是通过循环的方法,如果数据量不大的话,性能没多少差别的。
    如果你想查找效率高的话,用个HashTable不就OK了,将Transaction用个HashTable去实现就可以了。我觉得这个是查找问题,跟对象的Inner join没有关系。
      

  4.   

    我觉得还是有关系的,至少在性能上和内存上都要比直接运行SQL语句有更大的牺牲。只是想探讨如何在可维护性、可复用性和存储、性能之间进行平衡