Lập trình web nâng cao XML - Trường CĐN Đà Lạt - 22

String birthDate, String hairColor, String favoriteColor, String address1, String address2, String city, String state, String postalCode, String country)

{

Person p = new Person(firstName,lastName, birthDate, hairColor, favoriteColor); p.setHomeAddress(address1,address2,city,state,postalCode,country);

// Database logic goes here (this code has been omitted for brevity) return p;

}

}

}

Chú ý mã đó theo sau khai báo [WebMethod] là không có gì đặc biệt. Hàm CreatePerson() nhìn rất bình thường. Nó không cần bất kỳ mã đặc biệt nào để nhận các tham số của nó từ một SOAP hay tài liệu HTTP. Nó có thể tạo ra những đối tượng, tải những thành phần COM và truy cập cơ sở dữ liệu như những chương trình khác. Cuối cùng hàm free để trả lại một đối tượng phức tạp như kết quả của nó không có việc lo lắng tạo ra một sự đáp lại SOAP đang trên đường ở ngoài. Nền tảng .NEt xử lý tất cả chuyện này cho người phát triển, nhiều như vậy để dịch vụ Web không có ý tưởng mà đó là hiện thân được truy nhập từ xa!

Một khi dịch vụ được biên dịch và triển khai (.NET cũng tự động xử lý triển khai), nó thật sự được truy cậpp bởi bất kỳ kiểu của trình khách từ xa nào. Tập tin minh họa tài liệu khám phá .vsdisco:

Default.vsdisco:Tập tin khám phá toàn cục cho dịch vụ Web trong đó có chung cấp các liên kết đến các tài liệu chỉ định dịch vụ

<?xml version="1.0" encoding="utf-8"?>

<discovery xmlns="http://schemas.xmlsoap.org/disco/">

<discoveryRef ref="http://localhost/CSharpWebService/ CSharpWebService.vsdisco" />

<discoveryRef ref="http://localhost/HelloWorld/ HelloWorld.vsdisco" />

</discovery>

Chú ý rằng một trong những tham chiếu khám phá trong tập tin này là chỉ đến URL http://localhost/CSharpWebService/CSharpWebService.vsdicso được liệt kê dưới đây:

SharpWebService.vsdisco:

<?xml version="1.0" encoding="utf-8"?>

<discovery xmlns="http://schemas.xmlsoap.org/disco/">

<contractRef ref="http://localhost/CSharpWebService/Service1.asmx?wsdl" docRef="http://localhost/CSharpWebService/Service1.asmx" xmlns= "http://schemas.xmlsoap.org/disco/scl/" />

</discovery>

Ở đây chúng ta chuyển đến giao kèo WSDL. Thuộc tính ref của phần tử <contactRef> chứa một URL đến tài nguyên này ("http://localhost/CSharpWebService/Service1.asmx?wsdl"). Tài liệu wsdl hoàn chỉnh được liệt kê như sau:

createPerson.wsdl:

<?xml version="1.0" encoding="utf-8"?>

<definitions xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:mime= "http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tm= "http://microsoft.com/wsdl/mime/textMatching/" xmlns:soap=

"http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc= "http://schemas.xmlsoap.org/soap/encoding/" xmlns:s0= "http://tempuri.org/" targetNamespace= "http://tempuri.org/" xmlns= "http://schemas.xmlsoap.org/wsdl/">

<types>

<s:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://tempuri.org/">

<s:element name="CreatePerson">

<s:complexType>

<s:sequence>

<s:element minOccurs="1" maxOccurs="1" name= "firstName" nillable="true" type="s:string" />

<s:element minOccurs="1" maxOccurs="1" name= "lastName" nillable="true" type="s:string" />

<s:element minOccurs="1" maxOccurs="1" name= "birthDate" nillable="true" type="s:string" />

<s:element minOccurs="1" maxOccurs="1" name= "hairColor" nillable="true" type="s:string" />

<s:element minOccurs="1" maxOccurs="1" name= "favoriteColor" nillable="true" type="s:string" />

<s:element minOccurs="1" maxOccurs="1" name= "address1" nillable="true" type="s:string" />

<s:element minOccurs="1" maxOccurs="1" name= "address2" nillable="true" type="s:string" />

<s:element minOccurs="1" maxOccurs="1" name= "city" nillable="true" type="s:string" />

<s:element minOccurs="1" maxOccurs="1" name= "state" nillable="true" type="s:string" />

<s:element minOccurs="1" maxOccurs="1" name= "postalCode" nillable="true" type="s:string" />

<s:element minOccurs="1" maxOccurs="1" name= "country" nillable="true" type="s:string" />

</s:sequence>

</s:complexType>

</s:element>

<s:element name="CreatePersonResponse">

<s:complexType>

<s:sequence>

<s:element minOccurs="1" maxOccurs="1" name= "CreatePersonResult" nillable="true" type="s0:Person" />

</s:sequence>

</s:complexType>

</s:element>

Trình khách dịch vụ Web createPerson( )

Chúng ta sẽ bắt đầu viết trình khách của chúng ta bằng việc khảo sát siêu dữ liệu mà dịch vụ mới của chúng ta sẽ chấp nhận và trả lại. Chúng tôi sẽ kẹt tới những ví dụ sử dụng giao thức cầu khẩn SOAP. Để xây dựng lại bản ghi của John Smith trong hệ thống nhân sự mới chúng tôi sẽ cần gửi một tài liệu SOAP với khuôn dạng sau đây tới phương thức createPerson()

POST /CSharpWebService/Service1.asmx HTTP/1.1 Host: localhost

Content-Type: text/xml; charset=utf-8 Content-Length: length

SOAPAction: "http://tempuri.org/CreatePerson"

<?xml version="1.0" encoding="utf-8"?>

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap=

"http://schemas.xmlsoap.org/soap/envelope/">

<soap:Body>

<CreatePerson xmlns="http://tempuri.org/">

<firstName>John</firstName>

<lastName>Smith</lastName>

<birthDate>11/30/1974</birthDate>

<hairColor>brown</hairColor>

<favoriteColor>blue</favoriteColor>

<address1>200 Brattle Street</address1>

<address2></address2>

<city>Cambridge</city>

<state>MA</state>

<postalCode>02138</postalCode>

<country>USA</country>

</CreatePerson>

</soap:Body>

</soap:Envelope>

We đã có thể tạo ra tài liệu này bằng tay và cung cấp nó tới dịch vụ Web, nhưng tại sao đi xuyên qua nỗ lực khi .NET bao gồm những tiện ích để giúp đỡ làm nó cho chúng ta? Một tiện ích như vậy là lớp SoapHttpClientProtocol. Lớp này cung cấp một lớp của sự trừu tượng hóa ở trên giao thức SOAP nằm bên dưới. Những người phát triển có thể sử dụng API này để gọi là những dịch vụ Web từ xa giống như chúng là những phương thức cục bộ.

Lớp này cũng có thể được sử dụng thông qua các lớp con. Chúng ta phải tạo các lớp của chúng ta thừa kế SoapHttpClientProtocol và lắp nó vào dịch vụ Web chỉ định. Để cài đặt một lớp con của SoapHttpClientProtocol , chúng ta phải thực hiện ít nhất 4 nhiệm vụ:

Cung cấp một tạo dựng mặc định cho lớp để cài đặt thuộc tính Url của lớp cho nhằm định vị dịch vụ Web (giống như định nghĩa trong giao kèo WSDL của dịch vụ)

Tạo một phương thức trong lớp có cùng dấu hiệu như phương thức trong dịch vụ Web.

Gọi phương thức Invoke của lớp SoapHttpClientProtocol, chuyển tên của dịch vụ và một mảng các đối tượng ấn định tham số dịch vụ.

Cung cấp định nghĩa lớp cục bộ cho bất kỳ đối tượng phức tạp nào sẽ được trả về bởi dịch vụ.

Đoạn mã sau cho thấy một ví dụ về kỹ thuật tạo lớp con (sub-class) của lớp SoapHttpClientProtocol:

PersonCreator.cs: Một lớp tiện ích cung cấp truy cập cấp độ cao đến dịch vụ CreatePerson:

using System.Diagnostics; using System.Xml.Serialization; using System;

using System.Web.Services.Protocols; using System.Web.Services;

Thuộc tính WebServiceBindingAttribute phát biểu rằng lớp PersonCreator chứa đựng một hoặc nhiều phương thức Web mà sự thi hành gắn kết Service1Soap, Như định nghĩa bởi giao kèo WSDL cho dịch vụ Web. Các kết gắn tương tự tới những giao diện trong điều đó họ chỉ định tập hợp chặt chẽ của các phép toán. Những lớp mà thực hiện một hoặc nhiều ràng buộc như một dịch vụ Web cần chắc chắn rằng chúng thực hiện tất cả các thao tác được định nghĩa bên trong sự ràng buộc đó. Chúng ta hãy xem gắn kết Service1Soap sau:

<binding name="Service1Soap" type="s0:Service1Soap">

<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />

<operation name="CreatePerson">

<soap:operation soapAction="http://tempuri.org/CreatePerson" style="document" />

<input>

<soap:body use="literal" />

</input>

<output>

<soap:body use="literal" />

</output>

</operation>

</binding>

Sự gắn kết ngụ ý rằng lơp sẽ chứa một dịch vụ web CreatePerson() cài đặt một vài sắp xếp của hành động SOAP. Phương thức Web C## tương tự sẽ thể hiện dưới đây:

[System.Web.Services.WebServiceBindingAttribute(Name="Service1Soap", Namespace="http://tempuri.org/")]

public class PersonCreator : System.Web.Services.Protocols.

SoapHttpClientProtocol

{

[System.Diagnostics.DebuggerStepThroughAttribute()] public PersonCreator()

{

this.Url = "http://localhost/CSharpWebService/Service1.asmx";

}

[System.Diagnostics.DebuggerStepThroughAttribute()]

Một lời gọi đến phương thức dịch vụ web hay phép toán có thể được mã hóa theo hai cách: RPC hay tài liệu. Kiểu RPC mã hóa phương thức dịch vụ Web sử dụng SOAP cho chỉ định RPC. Kiểu tài liệu sử dụng ở đây được chỉ định bởi thuộc tính SoapDocumentMethodAttribute, tạo một thông điệp SOAP XML định dạng chính xác bởi giản đồ XSD chứa trong tài liệu WSDL của dịch vụ.

Dấu hiệu phương thức gọi CreatePerson() cũng theo các chỉ dẫn của tài liệu WSDL trong tham số của chúng và kiểu trả về.

[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/Cre atePerson",

Use=System.Web.Services.Description.

SoapBindingUse.Literal, ParameterStyle=System.Web.Services. Protocols.SoapParameterStyle.Wrapped)]

public Person CreatePerson(string firstName, string lastName, string birthDate, string hairColor,

string favoriteColor, string address1, string address2, string city, string state, string postalCode,

string country)

{

Phép thuật bắt đầu với một sự gọi tới phương thức Invoke của lớp SoapHttpClientProtocol. .NET sử dụng tham số đối tượng (một mảng các đối tượng String) vào trong một tài liệu XML SOAP, gửi tài liệu cho dịch vụ Web, đợi dịch vụ trả lời, và không quản chế kết quả trở lại vào trong vào vị trí 0 của mảng. Kết quả này là sắc thái tới một đối tượng Person và được trở lại cho trình khách.

object[] results = this.Invoke("CreatePerson", new object[] {

firstName, lastName, birthDate, hairColor, favoriteColor, address1, address2, city,

state, postalCode, country});

return ((Person)(results[0]));

}

}

Những định nghĩa cục bộ cho lớp Person và Address cần ép kiểu kết quả trả về mà không có lỗi. Xin nhắc lại, giao kèm WSDL có tất cả thông tin mà chúng ta cần tạo ra các định nghĩa lớp này. Thật ra, các định nghĩa lớp Person và Address này không tất yếu cần phù hợp với những cái mà được tìm thấy dịch vụ Web. Chỉ những thuộc tính công khai có thể tiếp cận (nghĩa là, những thuộc tính đó được đánh dấu là public hay có thể tiếp cận xuyên qua một một thiết kế mẫu getter/setter) cần xuất hiện trong mã trình khách.

public class Person

{

public string firstName; public string lastName; public string birthDate;

public string hairColor; public string favoriteColor;

public Address homeAddress;

}

public class Address

{

public string address1; public string address2; public string address3; public string city; public string state;

public string postalCode; public string country;

}

Ủy thác dịch vụ mà chúng ta xây dựng cung cấp một lớp thêm của sự trừu tượng hóa cho trình khách của chúng ta. Chúng ta có một giao diện mức doanh nghiệp tới dịch vụ Web PersonCreator. Những chương trình trình khách sử dụng lớp PersonCreator mà không cần lo lắng về nơi đâu nào dịch vụ Web hay điều mà nghi thức được dùng để triệu gọi nó. Như bạn có thể nhìn thấy ở đây, lớp PersonCreator dễ dàng đối với sự sử dụng. Bạn chưa bao giờ biết rằng có rất nhiều sự phức tạp-và siêu dữ kiện-ở dưới những vỏ bọc.

PersonCreator personCreator = new PersonCreator();

Person p = personCreator.CreatePerson("John", "Smith", "11/30/1974", "brown", "blue", "200 Brattle Street", "", "Cambridge", "MA", "02138", "USA");

Đây là một giao diện chương trình bóng. Lớp SoapHttpClientProtocol của Microsoft cất giữ chúng ta một lúc nào đó bằng việc đeo mặt nạ những chi tiết thông điệp SOAP. Quá trình của việc mở rộng lớp này mọi thời điểm chúng tôi muốn sử dụng dịch vụ Web có thể trở nên chán ngắt. Nếu đây là cách duy nhất để làm việc, mỗi thời gian bạn muốn sử dụng một dịch vụ Web bạn phải tải xuống giao kèo WSDL của nó, giải thích nó (mà có thể khó khăn, một cách đặc biệt khi nhiều lớp được triệu gọi!), và bằng tay tạo ra một lớp mẩu cài đặt tất cả các phép toán được định nghĩa. May mắn thay, .NET cung cấp các công cụ để làm tất cả điều này cho chúng ta.

Phát sinh một ủy nhiệm trình khách từ XML Metadata

Microsoft cung cấp một vài công cụ trong .NET Framework để giúp đỡ trong việc phát triển những ủy nhiệm trình khách để truy nhập những dịch vụ Web. WSDL có thể thực hiện, được định vị trong thư mục bin của nền tảng SDK, làm tất cả công việc khó khăn cho bạn. Cú pháp để chạy wsdl.exe từ dòng lệnh như sau:

Wsdl /language:language /protocol:protocol /namespace:myNameSpace / out:filename /username:username /password:password /domain:domain <url or path>

Cú pháp câu lệnh WSDL


Tham số

Giá trị


<url or path>

Một URL hay đường dẫn đến một sự diễn giải dịch vụ, tập tin diễn giải một dịch vụ Web trong WSDL. Nếu chúng ta chỉ định một tập tin,cung cấp một tập tin chứa sự diễn giải dịch vụ. Ví dụ: myWebservice.wsdl

Nếu chúng ta chỉ định một URL, URL cần tham chiếu đến một trang

.asmx hoặc trả về một sự diễn giả dịch vụ. Với các dịch vụ Web ASP.NET, chúng ta có thể trả về một sự diễn giải dịch vụ bởi việc áp dụng WSDL đến URL của dịch vụ web. Ví dụ, http://www.contoso.com/MyWebService.asmx?WSDL


/language:langu

age

(Tùy chọn) Ngôn ngữ lớp uỷ nhiệm được phát sinh trong. Những tùy chọn sẵn có bao gồm CS, VB, và JS, tham chiếu tới C#, Visual Basic.NET, và JScript. NET tương ứng. Nếu không có tùy chọn ngôn ngữ được chỉ rõ, lớp uỷ nhiệm được phát sinh ở C#.

/protocol:protoco

(Tùy chọn) Giao thức dùng để triệu gọi những phương thức dịch vụ

Có thể bạn quan tâm!

Xem toàn bộ 258 trang tài liệu này.

Lập trình web nâng cao XML - Trường CĐN Đà Lạt - 22

Giá trị

l

Web. Những tùy chọn Sẵn có bao gồm SOAP, HttpGET, và HttpPOST. Nếu không có nghi thức được chỉ rõ, SOAP là mặc định.

/namespace: myNameSpace

(Tùy chọn) Không gian tên của phát sinh ủy thác. Giá trị mặc định là không gian tên global.

/out:filename

(Tùy chọn) Tên của tập tin để tạo ra nơi chứa lớp ủy nhiệm. Tên mặc định được dựa vào tên dịch vụ Web.

/username:user name

(Tùy chọn) username được sử dụng khi kết nối đến một dịch vụ web khi sự xác thực được yêu cầu.

/password:pass word

(Tùy chọn) Mật khẩu được sử dụng khi kết nối đến một dịch vụ web có yêu cầu xác thực.

/domain:domain

(Tùy chọn) Tên miền được sử dụng khi kết nối đến một dịch vụ web yêu cầu có xác thực.

Tham số

Hãy sử dụng công cụ này với dịch vụ Web CreatePeson của chúng ta:

wsdl /language:CS /out:PersonCreator.cs http://localhost/ CSharpWebService/Service1.asmx?WSDL

Sau đây là mã lệnh mà tiện ích WSDL.exe sinh ra cho chúng ta:

PersonCreator.cs: Tập tin mã nguồn C# chứa mã ủy thác yêu cầu để truy cập phương thức dịch vụ Web createPerson():

//------------------------------------------------------------------

// <autogenerated>

// This code was generated by a tool.

// Runtime Version: 1.0.2914.11

//

// Changes to this file may cause incorrect behavior and will be lost if

// the code is regenerated.

// </autogenerated>

//-----------------------------------------------------------------

//

// This source code was auto-generated by wsdl, Version=1.0.2914.11.

//

using System.Diagnostics; using System.Xml.Serialization; using System;

using System.Web.Services.Protocols; using System.Web.Services;

[System.Web.Services.WebServiceBindingAttribute (Name="Service1Soap", Namespace="http://tempuri.org/")] public class Service1 : System.Web.Services.Protocols.

SoapHttpClientProtocol { [System.Diagnostics.DebuggerStepThroughAttribute()] public Service1() {

this.Url = "http://localhost/CSharpWebService/Service1.asmx";

}

[System.Diagnostics.DebuggerStepThroughAttribute()] [System.Web.Services.Protocols.SoapDocumentMethodAttribute ("http://tempuri.org/CreatePerson", Use=System.Web.Services.

Description.SoapBindingUse.Literal, ParameterStyle=System.Web. Services.Protocols.SoapParameterStyle.Wrapped)]

public Person CreatePerson(string firstName, string lastName, string birthDate, string hairColor, string favoriteColor, string address1, string address2, string city, string state,

string postalCode, string country) {

object[] results = this.Invoke("CreatePerson", new object[] { firstName,

lastName, birthDate, hairColor, favoriteColor, address1, address2, city,

state, postalCode, country});

return ((Person)(results[0]));

}

[System.Diagnostics.DebuggerStepThroughAttribute()]

public System.IAsyncResult BeginCreatePerson(string firstName, string lastName, string birthDate, string hairColor, string

favoriteColor, string address1, string address2, string city, string state, string postalCode, string country, System.AsyncCallback

callback, object asyncState) {

return this.BeginInvoke("CreatePerson", new object[] { firstName,

lastName, birthDate, hairColor, favoriteColor, address1, address2, city,

state, postalCode,

country}, callback, asyncState);

}

[System.Diagnostics.DebuggerStepThroughAttribute()]

public Person EndCreatePerson(System.IAsyncResult asyncResult) { object[] results = this.EndInvoke(asyncResult);

return ((Person)(results[0]));

}

}

public class Person { public string firstName; public string lastName; public string birthDate; public string hairColor; public string favoriteColor; public Address address;

}

public class Address { public string address1; public string address2; public string address3; public string city; public string state;

public string postalCode; public string country;

}

Trong đoạn mã trên, chúng ta dễ dàng nhìn thấy nó rất tương tự tập tin mà ta đã tạo. Một sự khác biệt chính là nó có 2 phương thức mới: BeginCreatePerson( ) và EndCreatePerson( ). Những chức năng này, được phát sinh bởi tiện ích WSDL.exe, cho phép chúng ta triệu gọi dịch vụ web CreatePerson không đồng bộ.

.NET hỗ trợ một mẫu thiết kế mà thực hiện triệu gọi phương thức web không đồng bộ, bất chấp của phương thức Web được viết như thế nào. Mẫu chỉ định hai phương pháp không đồng bộ mới, Begin () và End (), cho mọi phương thức đồng bộ. Những chức năng này đưa sự truy nhập không khóa cho những dịch vụ Web mà mất một thời gian dài để hoàn thành. Để gọi là chức năng không đồng bộ chúng ta phải thay đổi trình khách của chúng ta để gọi BeginCreatePerson ( ) thay vì CreatePerson(). BeginCreatePerson() khởi động dịch vụ web nhưng không đợi nó để kết thúc. Thay vào đó nó trả lại thẻ quản của đối tượng cài đặt của giao diện IAsyncResult. Giao diện IAsyncResult chứa một đối tượng WaitHandle nắm giữ tất cả sự đồng bộ phức tập trong sự đợi chờ cho dịch vụ web để hoàn chỉnh.

Một khi dịch vụ CreatePerson hoàn thành, chúng ta phải gọi hàm EndCreatePerson() để nhận tập kết quả. Sự gọi tớis EndCreatePerson() có thể xảy ra qua một chức năng phản hồi được đi qua vào trong BeginCreatePerson ( ), hay bạn có thể đợi trên đối tượng WaitHandle và sự gọi EndCreatePerson() khi dịch vụ đã kết thúc công việc của nó. EndCreatePerson() yêu cầu bạn chuyển thẻ quản IAsyncResult một tham số. Nó trả lại kết quả cùng cách những phương thức đồng bộ thực hiện.

V. Xây dựng ứng dụng mức Server

Trong nội dung này, chúng ta sẽ xây dựng một ứng dụng ví dụ - Margie’s Travel Golf Reservation System – sử dụng Microsoft .NET Framework. Golf Reservation System là một ứng dụng trong đó cho phép người sử dụng được đăng ký có thể tìm kiếm những khóa học đánh gôn, chi tiết về những khóa học đặc biệt, những thời gian cho phép khóa học đó, sổ đăng ký trong những thời gian phát bóng, và nhìn một danh sách của trước đó những lần đăng ký phát bóng.

Những yêu cầu về cơ sở dữ liệu

Những yêu cầu cơ sở dữ liệu cho thành phần phía phía máy chủ thì thật sự đơn giản . Chúng ta sẽ sử dụng một cơ sở dữ liệu Microsoft Access để lưu giữ tất cả các khóa học, người chơi golf, thông tin phát bóng, và những thời điểm phát bóng. Mục đích của chúng ta sẽ giữ cho mặt môi giới trong của hệ thống này càng đơn giản càng tốt. Cơ sở dữ liệu sẽ chứa đựng một số nhỏ những bản ghi cho sự trình diễn những mục đích, vì vậy một hệ quản trị cơ sở dữ liệu (DBMS) sẽ đủ. Giá ứng dụng này được có nghĩa tới quy mô, chúng tôi sẽ trông vào trong việc sử dụng một hệ quản trị cơ sở dữ liệu quan hệ phức tạp hơn (RDBMS) như Microsoft SQL Server.

Các dịch vụ Web XML của Golg Reservation System sẽ không truy vấn cơ sở dữ liệu Access một cách trực tiếp. Thay vào đó, tất cả dữ liệu sẽ được truy cập thông qua một lớp trừu tượng CourseDataSet. CourseDataSet sẽ bắt chước cấu trúc của DBMS nằm bên dưới và sẽ cung cấp sự truy nhập tới dữ liệu từ lớp ứng dụng nhanh và dễ dàng.

Máy chủ sẽ thực hiện một loạt các lớp DataAdapter để xử lý mọi thứ sắp xếp dữ liệu xuôi ngược tới cơ sở dữ liệu. Sẽ có một lớp DataAdapter đơn cho mỗi bảng cơ sở dữ liệu. Những bộ tiếp hợp này sẽ làm việc cùng nhau tải dữ liệu bảng vào trong data set. Những sự cập nhật dữ liệu sẽ yêu cầu sự theo sau ba bước riêng biệt


Logic kinh doanh sẽ cập nhật CourseDataSet với bản ghi mới. Hành động này sẽ trả về một bản ghi mới, loại bỏ hay cập nhật dòng dữ liệu.

Logic kinh doanh sẽ gọi phương thức Update() trên data adapter tương ứng để phân tích, cập nhật và đồng bộ dữ liệu với các bảng.

Lôgic doanh nghiệp sẽ gọi AcceptChanges() trên đối tượng CourseDataSet. Phương thức này này sẽ trả lại tập dữ liệu cho một trạng thái ổn định và nạp lại ý định bất kỳ thông tin mới nào từ cơ sở dữ liệu.

Yêu cầu về lôgic kinh doanh

Các thực thể trong Golf Reservation System sẽ được định nghĩa trong các lớp sau:



Tập tin lớp

Diễn giải

Diễn giải


Address.cs

Định nghĩa lớp Address trong cấu trúc địa chỉ thông thường. Thể hiện của lớp này được tham chiếu bởi các đối tượng GolfCourse và Golfer.

GolfCourse.

cs

Lớp GolfCourse chứa các thuộc tính thông dụng của một khóa

golf.

Golfer.cs

Lớp Golfer định nghĩa một người chơi golf trong hệ thống. Tên, địa chỉ và thông tin bảo mật.


Hole.cs

Lớp Hole định nghĩa một lỗ trên một khóa học môn đánh gôn. Những đối tượng lỗ chứa đựng những thuộc tính như sự ngang hàng, khoảng cách và sự bất lợi

Tee.cs và TeeTime.cs

Lớp Tee định nghĩa một tập hợp điểm phát bóng thông qua khóa

học.

Xem toàn bộ nội dung bài viết ᛨ

..... Xem trang tiếp theo?
⇦ Trang trước - Trang tiếp theo ⇨

Ngày đăng: 19/11/2023