VB.NET视频
第一单元 21世纪的程式执行??.net framework组成元素 ??中介语言格式IL ??组件的搜寻规则: ??部署的选择 单元2物件的导向程式设计 物件的复制 物件的产生 Dim e as new employee() 物件的毁灭(回收空间) 虽然GC帮我们减少了很多工作,但有时大文件空间的时候,最好还是要自己手动回收一下。
方法:
Obj.Dispose()
Obj=Nothing '让物件变成没有被参考
装箱(Boxing) 方法Method 多载(Overloading)其实就是函数的重载(可能版本有点老吧,说法都没跟上时代潮流) 资料的保护(就是访问修饰符) 属性的操作 只读 ReadOnly 关键字
只写 WirteOnly 关键字
好处:
可以通过方法来对这个属性做一些判断或修改
Shallow copy 第三单元 类别与基底类别库常量和共享 共用成员不用创建物件(不用实例化)直接用类名.属性或方法 列举型别(Enum) 模组 Public Module _name
End Module
命名空间 Namespace _name
End Namespace
??命名空间可以嵌套,空间里可以有子空间。增加可读性,把一类的东西分到一个空间中,好区分,减少类名的冲突。 使用: 导入命名空间 Imports BT=TeamX.BusinessTier
…
Dim c as BT.customs
集合 使用vs建立类别库,类别库将会编译成DLL 方式1:加入DLL参考 方式2:加入专案 第四单元 事件驱动程序设计多对一的事件处理
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 窗体调用显示
窗体是类,引用时需要new
Show 会可以往下执行
ShowDialog 会此窗体被关闭才会往下执行
物件的毁灭 我们可以选择释放资源
呼叫Dispose方法
表单物件为例,可以呼叫close或dispose方法
第五单元明确型别转换 例外处理 每一个例外都被视为物件,通过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,etc.
*缺點: *每個資料庫提供者的預儲程序語法都不一樣
*預儲程序不容易轉換成其它格式的程式
第七单元 资料库ADO.NETADO.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:WindowsAssembly
直接用檔案總管就可以檢視…
安装组件到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了,还要考虑不同平台上的运行,并发操作带来的问题,需要有什么样的支撑环境等等一系列的工作。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
