實例一
今天你還是像往常一樣來上班,一如既往地開始了你的編程工作。
項目經理告訴你,今天想在服務器端增加一個新功能,希望寫一個方法,能對Book對象進行處理,將Book對象的所有字段以XML格式進行包裝,這樣以后可以方便與客戶端進行交互。并且在包裝開始前和結束后要打印日志,這樣方便調試和問題定位。
沒問題!你覺得這個功能簡直是小菜一碟,非常自信地開始寫起代碼。
Book對象代碼如下:
class Book attr_accessor :book_name, :pages, :price, :author, :isbn end
然后寫一個類專門用于將Book對象包裝成XML格式:
class Formatter def format_book(book) puts "format begins" result = "<book_name>#{book.book_name}</book_name>/n" result += "<pages>#{book.pages}</pages>/n" result += "<price>#{book.price}</price>/n" result += "<author>#{book.author}</author>/n" result += "<isbn>#{book.isbn}</isbn>/n" puts "format finished" result end end
調用代碼如下:
book = Book.new book.book_name = "Programming Ruby" book.pages = 830 book.price = 45 book.author = "Dave Thomas" book.isbn = "9787121038150" formatter = Formatter.new result = formatter.format_book(book) puts result
你寫好了之后,迫不及待地開始運行,運行結果也完全符合你的期望。
項目經理看完后,對你非常滿意,小伙效率很高的嘛!你也非常的得意。
不過兩天之后,項目經理又找到了你,他說之前沒有考慮到需要交互的客戶端還包括手機設備,而手機設備都比較吃流量,用XML格式來傳輸太耗流量了,想最好能改成使用JSON格式傳輸。但是之前的XML格式也要保留,最好可以由客戶端指定使用哪種格式。
你有些不開心,心里低估著,為什么一開始不考慮周全呢,現在又要改遺留代碼。但對方畢竟是領導,你還是要服從命令的,于是你開始修改Formatter類:
class Formatter def format_book(book, format) puts "format begins" result = "" if format == :xml result += "<book_name>#{book.book_name}</book_name>/n" result += "<pages>#{book.pages}</pages>/n" result += "<price>#{book.price}</price>/n" result += "<author>#{book.author}</author>/n" result += "<isbn>#{book.isbn}</isbn>/n" elsif format == :json result += "{/n" result += "/"book_name/" : /"#{book.book_name}/",/n" result += "/"pages/" : /"#{book.pages}/",/n" result += "/"price/" : /"#{book.price}/",/n" result += "/"author/" : /"#{book.author}/",/n" result += "/"isbn/" : /"#{book.isbn}/",/n" result += '}' end puts "format finished" result end end
新聞熱點
疑難解答