2010-04-15 47 views
0

编程很有趣:我了解到,通过尝试简单的挑战,读了一些书和下面的一些教程。我能够掌握用OO编写的概念(我在Ruby中这样做),并自己编写一些代码。但是,我感觉到的是我重新发明轮子:我没有接受过教育或找到一本书(这是一本免费的书),它解释了为什么而不是如何,并且我已经学会了从A团队来说,这是让它走到一起的计划。所以,凭借我的nuby Ruby技能,我决定编写一个虚拟商店。我想通了以下内容:设计技术:如何设计一个复杂的系统处理订单,产品和单位

我的虚拟商店将有:

  • 产品和服务
  • 存货
  • 订单和运输
  • 客户

现在这不是复杂的。在一些很酷的工具(CMapTools)的帮助下,我提出了一些概念,但很快(由于我的设计经验不足),我的设计开始咬我。我的第一个产品线是虚拟的“笔记本电脑”。所以,我创建了一个类(红宝石):

class Product 
    attr_accessor :name, :price 
    def initialize(name, price) 
    @name = name 
    @price = price 
    end 
end 

可实例做(IRB)

x = Product.new("Banana Pro", 250) 

因为我希望我的虚拟客户能够购买多个产品,或各种配置,我想出我需要某种“订单”机制。

class Order 

    def initialize(order_no) 
    @order_no = order_no 
    @line_items = [] 
    end 

    def add_product(myproduct) 
    @line_items << myproduct 
    end 

    def show_order() 
    puts @order_no 
    @line_items.each do |x| 
    puts x.name.to_s + "\t" + x.price.to_s 
    end 
    end 
end 

,可以通过做(IRB)

z = Order.new(1234) 
    z.add_product(x) 
    z.show_order 

锦绣被实例化,我现在有一个非常简单的订购系统,让我将产品添加到订单。但是,这是我真正的问题。

如果我的产品有三种型号(经济,商业,炫耀)会怎样?或者让我的产品由独立的单元组成(更大的屏幕,更好的键盘,不同的操作系统)?当然,我可以让他们三个独立的产品,或增加我的产品类的复杂性,但我期待的是设计一个灵活的产品对象的最佳实践,可以在现实世界中使用,以促进一个复杂的系统。

我的道歉,如果我的语法和我的拼写与错误,因为英语不是我的母语,我花时间检查,据我可以理解和翻译正确!

感谢您的回答,评论和反馈!

回答

0

更多的发现,阅读一本令人眼花缭乱的严肃书籍。但后来我记得去年的一些回忆,我在那里做了一些nuby的网页开发和学习一些Rails的组合。我想到CRUD!所以,我认为所有的对象都需要一个CRUD界面。我仍然想知道是否通过将实例变量设置为nil使其标记为垃圾收集。我使用这个类被添加到平衡数组中。我认为使用CRUD方法是传统API的第一步。

class Product 

    attr_accessor :my_name, :my_description, :my_amount 

    # Create 
    def initialize(name, description, amount) 
     @my_name = name 
     @my_description = description 
     @my_amount = amount 
    end 

    # Read/Show 
    def show 
     x = [@my_name, @my_description, @my_amount] 
    end 

    # Update 
    def alter(name, description, amount) 
     @my_name = name 
     @my_description = description 
     @my_amount = amount 
    end 

    # Destroy 
    def clean 
     @my_name = nil 
     @my_description = nil 
     @my_amount = nil 
    end 

    # Diagnose is Development/Test Mode 
    def diagnose() 
    puts "initialize(name, description, amount)" 
    puts "{#@my_name} :: {#@my_description} :: {#@my_amount}" 
    puts "%s :: %s :: %.2f" % [@my_name, @my_description, @my_amount] 
    end 

end 
0

其中一个很酷的事情,我发现:使用整数之一,但将其转化为一个更好的货币格式,使用字符串格式

puts "%s : $ %.2f" % [@name.to_s, @price] 

您还可以使用printf的,但它看起来更C-不是闪闪发光的红宝石。还了解到我可以将小单元作为单独的对象放入数组中。

def initialize(name) 
    @my_name = name 
    @my_stack = [] 
end 

def add_unit(unit) 
    if @my_stack.length < 8 
     @my_stack << unit 
     puts "Added unit" 
    else 
     puts "Only room for 8 units." 
    end 

end