友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

VB2008从入门到精通(PDF格式英文版)-第139章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




                The workbook and worksheet could be defined as interfaces or as classes。 Which would be  

          better? Let’s assume that workbook will be defined as an interface and then implemented by a  

           class。 The approach is a mitment to a ponent architecture; allowing you to implement  

          multiple types of workbooks。 However; the likelihood of implementing multiple workbook  

          types is rather remote; so why use interfaces? Because interfaces fit better into a bigger context。 

                Let’s say that you have pleted your super…duper server…side application and want  

          to programmatically share the code with multiple machines。 Having one puter call   

          functionality on another machine is almost trivial; but to attain the best performance and  

          resource usage; you should use interfaces。 



           Defining the Server Spreadsheet Interfaces 



           Defining the interfaces for the server spreadsheets is actually rather plicated because of  

          the requirements。 The requirements state performance and usability are important; which; in  

          this case; is asking quite a bit; as you will see as we work through the example。 Let’s start with a  

          bottom…up development approach and outline the interfaces。 



           Defining the Debug Interface 



           Because the spreadsheet is from a production coding example; included in the discussion will  

          be pieces of code that demonstrate good programming practices。 The following is the base  

          interface for all of my interfaces; which is defined in the Devspace。Trader。mon project。 



           Public Interface IDebug  

              Property Debug() As Boolean 

           End Interface 


…………………………………………………………Page 315……………………………………………………………

                                                       CH AP T E R   1 1   ■    L E A R N IN G   AB O U T   。 N E T  G E N E R I CS 293 



     The IDebug interface has a single Boolean property called Debug; which can be assigned and  

retrieved。 The idea behind the IDebug interface is to enable a ponent to generate debug  

output。 One of the major headaches with debugging applications that process large amounts  

of data is finding where the problem is。 Imagine processing several million records; and the  

bug happens in record 900;001。 You don’t want to debug 900;000 records before hitting the bug。  

Thus; the challenge is figuring out what went wrong without using the debugger。 This is where  

IDebug es into play。 It provides a mechanism to let the implementation say what is going  

on; so if a bug needs to be deciphered; you do so by looking at the output。 

     The following example demonstrates how to use the Debug flag。 The class that contains this  

code implements the IDebug interface and sets the Debug flag at the beginning of its execution。 



Dim baseType As String() = _ 

  typeToInstantiate。Split(New String() { 〃''〃; 〃''〃 }; StringSplitOptions。None) 

If baseType。Length = 0 Then 

    Throw New Exception(〃There is no base type; which is an error〃) 

End If 

If Debug Then 

    For Each str As String In baseType  

        GenerateOutput。Write(〃Workbook。Load〃; 〃baseType(〃 & str & 〃)〃) 

    Next 

End If 



     The first line of code is used to split up a buffer into individual pieces; where double square  

brackets delimit the buffers。 The Debug property is used to output the split…up buffer using the  

mand GenerateOutput。Write()。  



■Tip  Although I have defined my own debugging infrastructure; there is another infrastructure that you can  

use; called log4net (http://logging。apache。org/log4net/)。 This is a prehensive infrastructure  

that you may want to investigate。 



     A Debug flag was used to output some text; otherwise; that information is not usually visible。  

Without a Debug flag; the only way to get that information is by setting a breakpoint after the  

Split() statement; and then individually investigating the resulting buffers。 If you had to do  

that for 900;000 records; you would bee bored very quickly; and let’s not even talk about  

how much time you would waste。 

     The Debug flag serves two purposes。 The first is to generate output to allow you to do a post

mortem analysis when trying to figure out a bug。 The second is to generate output when a bug  

occurs in a production context。 By giving the user the ability to define a Debug flag; you are no  

longer reliant on having the user explain to you step by step how to reproduce the bug。 All you  

need to do is tell the user to activate the Debug flag (your program would probably have a menu  

item for this); run the program until the bug occurs; and then send you the debug log file output  

for analysis。 


…………………………………………………………Page 316……………………………………………………………

294       CH AP T E R   1 1   ■    L E A R N I N G   A B OU T   。 N E T  G E N E R I CS 



           Defining the IWorksheetBase and IWorksheet Interfaces 



           The worksheet is implemented using worksheet and workbook interfaces。 Remember that one  

           of the requirements is to have a spreadsheet implementation that is very fast。 This would mean  

           if a spreadsheet contained numbers; the best implementation would be a spreadsheet of  

           Double types。 However; if the spreadsheet contained string buffers; the best implementation  

          would be a spreadsheet of  String types。 Figure 11…2 shows a spreadsheet of Double and  

           String types。 



           Figure 11…2。 Spreadsheet of strings and doubles 



                In Figure 11…2; the workbook references a worksheet of type Worksheet(Of Double) and  

           Worksheet(Of String); and in the general case; Worksheet(Of BaseType)。 You can see how an  

           interface using  generics for a worksheet could be potentially defined: define a general  

          worksheet and define the actual type using  generics。 The problem with th
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!