VB.NET视频

第一单元 21世纪的程式执行

  .net framework组成元素
    基底类别库(BCL)
      提供开发各种解决方案时所需使用的物件
      所有的.net语言皆使用同一组
      将各种不同解决方案的模型一致化
    共同语言执行时期(CLR)
      提供所有.net程序语言执行程式时的服务
      提供自动记忆管理
      提供与COM元件互通的能力
      内建多执行绪执行能力

  中介语言格式IL
    由微软所指定,是CLR的组合语言
    所有.net程式语言编译器的目标格式皆为IL
    可在不同平台,跨平台使用
    编译成原生码之后的执行,仍被CLR管理

  组件的搜寻规则:
    从GAC中找(搜寻组件公用快取)
    如果没有找到,不过有组态设定档存在,则搜寻组态设定档所指定的位置。
    如果还是没有找到,.net会搜寻执行档所在的目录
    如果还是没有找到,应用程式将发生错误并结束执行、

  部署的选择
    XCOPY Deployment
    注册到GAC中
    透过.Config

单元2

物件的导向程式设计
物件——对象
属性——属性
行为——方法

物件的复制
e.Clone()

物件的产生
Dim e as employee
e=new employee();

Dim e as new employee()

物件的毁灭(回收空间)
GC资源收集器来自动回收,会周期性地自动执行

虽然GC帮我们减少了很多工作,但有时大文件空间的时候,最好还是要自己手动回收一下。
    方法:
    Obj.Dispose()
    Obj=Nothing      '让物件变成没有被参考

装箱(Boxing)
  所有的东西不见得都是物件
  实质型,放在堆点里面, 当成物件来看,tostring()装箱

方法Method
  用来执行一些动作的程式,就是Method

多载(Overloading)其实就是函数的重载(可能版本有点老吧,说法都没跟上时代潮流)
  多个名称相同的方法

资料的保护(就是访问修饰符)
  尽可能的将资料隐藏起来。(将内部成员限制访问)

属性的操作
set方法与get方法

只读  ReadOnly    关键字
只写 WirteOnly    关键字 
好处:
    可以通过方法来对这个属性做一些判断或修改

Shallow copy
Deep copy(需要自己写两层复制)

第三单元 类别与基底类别库

常量和共享
  Const
  Shared(共用成员)

共用成员不用创建物件(不用实例化)直接用类名.属性或方法

列举型别(Enum)
  就是枚举类型

模组

  Public Module  _name

  End Module

命名空间

    Namespace _name

    End Namespace

  命名空间可以嵌套,空间里可以有子空间。增加可读性,把一类的东西分到一个空间中,好区分,减少类名的冲突。

使用:
  完整参照(完整的名字)
    优点:确保对象的类型正确
    缺点:代码冗长

导入命名空间
  Imports
  就可以只写最关键的类名
  导入太多命名空间可能会:妨碍程序的可读性,增加名称冲突的风险
  折衷方法:建立命名空间的别名。

Imports BT=TeamX.BusinessTier
            …
            Dim c as BT.customs

集合
  ArrayList 还可以排序
  HashTable

使用vs建立类别库,类别库将会编译成DLL

方式1:加入DLL参考
  执行起来较有效率,因为只有一个专案
  当Dll变更之后,必须手动重新 编译

方式2:加入专案
  将自动编译DLL
  会在背景编译变更过的元件,这会导致暂时停止回应。

第四单元 事件驱动程序设计

    多对一的事件处理  
        Private Sub form_load(…) Handles button1.click,button2.click       
            Message.show("Changed!") 
        End Sub
    一对多的事件处理


在執行時期可以動態加入或移除事件與事件處理的關連
 *範例: *在按鈕的事件中,呼叫 AddHandler 或是 RemoveHandler 
Private Sub cmdMonitor_Click(…) Handles cmdMonitor.Click     
        Dim txt As TextBox, c As Control     
        For Each c in Me.Controls         
            If TypeOf c Is TextBox Then             
                txt = c             
                AddHandler txt.TextChanged , AddressOf Me.Common_TextChanged        
            End If     
        Next 
    End Sub 

WinForms
AutoScroll属性
Anchor属性(固定控件的位置)

窗体调用显示
    窗体是类,引用时需要new
        Show 会可以往下执行
        ShowDialog 会此窗体被关闭才会往下执行

物件的毁灭
无法自行毁灭物件
物件只能被garbate collector所毁灭

我们可以选择释放资源
    呼叫Dispose方法
    表单物件为例,可以呼叫close或dispose方法

第五单元

明确型别转换
Option Strict On 开启明确型别转换
Option Explicit On 开启显示声明

例外处理
  发生了预期之外的状况
  例如: 除零錯誤
    數值溢位
    存取陣列超過界限
    物件參考不存在
    檔案不存在
    無法存取資料庫

每一个例外都被视为物件,通过throw掷出,通过catch方式捕捉

例外的类别
    System.SystemException系統定義的例外
    System.ApplicationException使用者自訂的例外

处理
    使用try-catch语法
    Try        
        statement1        
        statement2 
    Catch ex As Exception        
        statement4        
        Statement5
    Finally
        Statement6
        Statement7
    End Try
(ps:Throw New System.ApplicationException(“File not found!”,ex) 扔出一个新的错误例外)

应用程式的追踪
追踪会记录有关从程式执行的讯息

第六单元 资料库设计与SQL

开放式资料库设计
    栏位
    栏位是具有型别的(string,int。。。)
    主索引键(primary key)

    关联
        一对多
        一对一
        多对多

    资料库正规化
        第一阶正规化:一个栏位中只包含一个“原子”的资料
        1NF,2NF,3NF,…


    不要有重复的资料,资料只要储存一次
    命名规则很重要



资料库管理系统(DBMS)
    资料
    资料库引擎JET

        要求→ 资料库引擎 → 资料

    类型:MS SQL Server, Oracle, DB2, MySQL

    工具
        SQL Server 
                Query Analyzer : 執行 T-SQL 語法 
                服務管理員 : 啟動或停止 SQL Server
                Enterprise Manager : 管理 SQL Server 

        Microsoft Access
                建立資料庫、查詢、…
                使用 JET 引擎,免費 

        其它:
                使用 Visual Studio .NET 中的伺服器總管 
                WebMatrix 整合開發環境 (http://www.asp.net/)


结构化查询语言(SQL)
    DML:Data Manipulation Language (select, update, …)
    DDL:Data Definition Language (create, drop, …) 
    DCL

    Join   table_name on 
    Outer join

    Insert
    Update
    Delete

  删除记录的时候,最好多设置一个字段来标记已不被使用,不要真的删除,这会节省效率,也会减少不必要的麻烦。

预储程序(存储过程)
    可以接受參數 
    可以回傳資料表 
    預先編譯、最佳化過 – 幾乎是十倍快


    优点: 
        *執行快速 
        *將複雜的 SQL 程式封裝起來 
        *提供另外一層的存取控制能力 
        *大部份的資料庫提供者都支援 
        *SQL Server, Oracle, etc. 
        *缺點: *每個資料庫提供者的預儲程序語法都不一樣 
        *預儲程序不容易轉換成其它格式的程式

第七单元 资料库ADO.NET

ADO.NET架构


    资料提供者
        原生提供者: SQL Server , Oracle
        非原生提供者: OLEDB , ODBC

    核心命名空间
        一般:     System.Data, System.Data.Common
        SQL Server: System.Data.SqlClient
        Oracle: System.Data.OracleClient
        OleDB:      System.Data.OleDb
        ODBC:   System.Data.Odbc
    存取方式



资料读取与写入
    DataReader类可以逐一读取资料
    只能下一个,唯独的游标

    存取资料步骤
        1、开放资料库连线
        2、进行资料库操作(读取)
        3、关闭资料库连线



DataSet
    就是一个在记忆中的资料结构,用表格的方式来储存

    DataSet = 離線式的 Recordset
        資料是由伺服端複製回來
        然後在用戶用端離線處理資料
    允許你 :
        減少資料庫伺服器的負載
        關閉資料庫連線,並且離線處理資料
    特別是在分散式應用程式中特別有用 


    使用DataAdapter类填满DataSet类
        sql = "Select * From Products;"
         .
         .
         .
        Dim adapter As ss.SqlDataAdapter, ds As System.Data.DataSet
        dbConn  = New ...
        dbCmd   = New ...
        adapter = New ss.SqlDataAdapter(dbCmd)
        ds      = New System.Data.DataSet()

        dbConn.Open()
          adapter.Fill(ds)
        dbConn.Close()

        ds.Tables(“Table”).TableName = “Products”  ‘** 修改 DataSet 中表格的名稱 …

    DataSet :
        可以儲存你想要處理的所有資料
        可以搜尋、排序、修改
    範例:
        將整個 Sales 資料庫的資料填滿 DataSet
        sql = "Select * From Customers; Select * From Orders; " & _
              "Select * From OrderItems; Select * From Products;"
         .
         .
         .
        dbConn.Open()
          adapter.Fill(ds)
        dbConn.Close()


工具

第八单元 界面:类别的设计(接口)

首先制定协定
    Interface
    使用implements 来实现


第二步才是实作
    必须实现接口中的每一个方法,否则无法编译

优点:
    统一了方法,当具体行为改变时,不用改变客户端的程序。

多型
    就是声明接口,实例不同对象,就可以达到程序不用修改的效果

物件的复制
    IClonable
Public Class Customer: Implements IClonable 
    Private m_Name As String 
    Private m_Email As String 
    Private m_Balance As Decimal 
    ... 
    Public Function Clone( ) As Object Implements ICloneable.Clone 
        Return Me.MemberwiseClone( ) ‘** returns a shallow copy... 
    End Function


IComparable接口
    比较两个物件,并传回一个数值(使用ASCII码来比较)
        < 0 表示 obj1 < obj2 
        = 0 表示 obj1 = obj2 
        > 0 表示 obj1 > obj2

    Public Interface IComparable     
        Function CompareTo(obj As Object) As Integer 
    End Interface


泛用型资料层
    通过选择判断来决定实例化具体的那个数据库对象连接。

第九章 继承:类别的设计

继承的基础
    inherits继承

    术语
        Base/Super/Parent
        Derived/Sub/Child

    特点:单继承。就是只能继承一个对象

重写与动态细节
    Overridable:定义为可重写的方法
    Overrides 来重写

    就是动态方法和静态方法
        静态方法比较快,因为要呼叫的方法已经预先决定。
        动态方法比较有弹性,因为是动态的。

基底类别的设计
    必须被继承和必须被重写
        MustInherit
        MustOverride

    限制不被继承
        NotInheritable


    Equals和GetHashCode
        如果物件是相等的,那么GetHashCode必须要相等

第10单元 资料库 商业层设计

资料存取的一般化
    连线的开启与关闭
        单一或少数使用者的情况:保持连线开启
        多使用者的情况:用时开,用完就关闭。
    连线集区(Pooling)
        连线会存放到集区中



一般资料存取的问题
    SQL指令隐码攻击(注入)
    验证输入
    Regular expressions

    友谊类别
        Friend  

资料层的设计
    多层次设计:模组化、弹性、重复使用
    重量化和轻量化


商业逻辑层的设计
    支持流程中所有安全性、逻辑与资料存取(验证、维护、存储)

    具型别DataSet
        Dim DS As System.Data.DataSet 
        Dim customersDS As DataTier.CustomersDataSet 
         . 
         . 
         . 
        dataAdapter.Fill(DS) 
        dataAdapter.Fill(customersDS) 
        ‘ 一般的 dataset 存取方式
        FirstName = DS.Tables(“Customers”).Rows(i).Item(“FirstName”).ToString() 
        ‘ 具型別 dataset
        FirstName = customersDS.Customers(i).FirstName

    ORM Framework

第十一单元 以元件为基础的开发

组件
建立一个DLL组件
组件层级的attributes

强式名称

数字签章

.snk挡

com元件
互通机制
.net呼叫com元件

建立ccw

interop的运作

第十二单元 应用程式设计与布置

应用程式设计
    (1)整体的:布署单一的      .exe+ .net 到用户端
    (2)分层结构的, .exe,  DLLs ,  .net 到用户端
    (3)远端,布署到用户端与服务端
    (4)以web为基础的,布署web网页,DLLs+.net到web服务器



应用程式布署
    .net必须安装
        CLR + FxCL必须安装在 .exe执行的主机上
    组件manifest

    AppBase
        .exe所在的位置称为AppBase,应用程式的主目录


    布署选项
        XCOPY布署
            将exe,dlls+相关档案,全部拷贝到同一个资料夹
        零接触布署
            给exe一个url,用户直接透过ie浏览url
            NET 將 AppBase 設定到 Web 伺服器上的虛擬目錄 ! 
            .NET 從 AppBase 下載 .EXE 和 .DLLs 
            問題: 安全性? 如何下載必要的檔案 (資料庫)
    组建搜寻演算法

    版本转向
        应用程式的.config挡设计可以重写.exe manifest

    GAC
        Global Assembly Cache 
        位於 C:\Windows\Assembly 
        直接用檔案總管就可以檢視… 

        安装组件到GAC
            组件必须有强式名称,使用gacutil.exe命令列工具(要有管理员权限)

    CodeBase


    共用布署
        将共用的各版本组件安装到GAC
        具有强式命名的组件载入的效率比较快

    下载布署
        使用CodeBase来指定DLLs位置

    潜在的问题:
        (1)config档hell问题
        (2)程式码逆向工程
        (3)程式码存取安全性


通过reflection机制手动布署
    是一种在执行阶段针对组件进行处理的机制
        载入组件
        建立物件
        检查栏位、方法、属性的规格
        存取栏位、方法、属性

第十三单元 分散式程式设计

分散式设计
    同步
        用户端呼叫服务端,然后等待回应
        简单,传统的程式设计模型
        基于RPC的基础上
        RPC架构
            Proxy-stub物件用来建立爽法的同步呼叫机制
            proxy是在用户端,stub在服务端

        常见的同步设计
            Form-based web 应用程式(webForms)
                浏览器解决方案,要求某一页,等待服务器传回html
            Web service
                呼叫web方法,等待xml资料传回来
                连接不同平台的应用程式
            Remoting
                程式,呼叫方法,等待结果传回来
                两端都是.net平台
                连接.net平台下各层的元件(例如,java和.net)
                例如:
                    .NET on Linux & .NET on Windows 
                    .NET on WinXP & .NET/COM+ on Win2003


    非同步
        用户端传送要求,然后用户继续进行其它工作,服务端执行完后在将回应传给用户端
        比较有弹性
        比较难设计、实作、测试


Remoting设计
    Sales物件是一个“single-call MBRO”

    使用IIS(web server)
        很容易开发和设定服务端
        可以使用windows安全机制


Web services
    WSDL=web service description language


    .net web service
        步骤:
            1、建立一个asp.net web 服务专案
            2、专案位置=http://localhost/SalesWebService 
            3、参考businessComponent.dll
            4、将sercicel.asmx改名为Sales.asmx
            5、撰写Sales.asmx的程式码Sales.asmx.vb

第十四单元 concurrent Programming

指的是有多个操作会同时执行的程式。

Concurrency
    多个操作同时执行
    范例
        web服务器慧颖多个浏览器的要求
        资料库服务器处理多个查询
    怎么办到?
        实际上,一个cpu会在多个程式之间快速切换,看起来就像同时执行

    cpu切换
        由硬件切换
        每隔一段时间,程式暂停、等候回应

    行程(process)
        多行程
        多执行绪


多执行
    设计上很困难
        1、协调问题
            通过执行绪通讯协调
            等待彼此执行结束
                join:值得就是等待执行绪执行完
                    一直等
                    等一段时间(带参数)
            检查执行绪执行状况
                IsAlive

        2、通讯问题
            参数
            结果
            执行过程中的变数值

            使用队列
                执行绪使用dequeue方法从队列取出资料
                执行绪使用enqueue方法将资料加入队列
        3、同步问题
            使用syncLock指令
                只有一个执行绪可以进入,其它执行绪要等
            使用执行绪安全的队列物件

        多执行绪很难设计
            很多细节要注意
            很难证明执行结果一定正确
            很难进行侦错
            可能产生死结(deadlock)
            必须在执行绪中处理例外


delegates
    是一种方法的指标,可以做呼叫端与被呼叫端的抽象化。

    在执行绪上的另一层抽象化
    内建支援多执行绪
    更有效率:因为使用执行绪集区(thread pool)
    支持参数传进与传回值

第十五单元 软体工程

  所谓的“软体工程”其实就一个软体开发程序,依循这些程式就可以开发出稳定、可靠的软体系统,这些开发程序也可以不断重复使用、不断改良

软体工程
    背景:
        软件越来越困难
        软件应用在重要的系统上
        软件甚至用在和生命相关的系统上

    一般的做法:
        传统“瀑布式”模型
            1.需求分析
            2.设计
            3.实作
            4.单元测试
            5.整合测试
            6.布署
            7.维护
        最近流行的“eXtreme Programming”模型
            一个非常不同、比较精简快速的流程
            主要原则:
                把客户整合到软件开发流程中
                随时设计
                随时测试
                不做过当的设计,越简单越好

工具
    UML绘制工具
    程式码分析工具:
        FxCop
    测试工具:
        NUnit是一个免费的单元测试工具
    原始码管理工具:
        版本管理工具(Visual SourceSafe 、CVS 、 WinCVS)
    文件产生工具:
        XML注解
    Make工具:
        是一个在Unix系统上常用的工具,用自动化整个软件的组建(编译)流程。
        NMake是视窗版的

  我好像学了一门古老的语言,而且跟语法都没有关系,介绍了从最初的程序设计到后来的软件工程,从软件设计到程序的编译会产生什么文件,需要那些系统工具的支持,比如CLR、DLL等等,再到软件的部署、维护用到的技术、工具和方法,从一个更加接触底层的角度去学习了软件的整个流程。
  视频里面讲了好多都不认识的系统软件,原来我们编写的程序要真正的发布运行还需要学习很多的东西,不仅仅只是写完代码就ok了,还要考虑不同平台上的运行,并发操作带来的问题,需要有什么样的支撑环境等等一系列的工作。

你可能感兴趣的:(VB.NET视频)