Organizing Domain Logic: Table ModuleThe second pattern for representi dịch - Organizing Domain Logic: Table ModuleThe second pattern for representi Việt làm thế nào để nói

Organizing Domain Logic: Table Modu


Organizing Domain Logic: Table Module
The second pattern for representing domain logic is the Table Module. As the name implies this pattern calls for a Business Component to map to a table in the database. The component then contains all the domain logic methods required to manipulate the data. There are two key considerations here.

First, although the name refers to a table, Table Module can also be used to abstract frequently used sets of data created by joining multiple tables together in a view or query. This makes dealing with more complicated data much easier for the caller to the Business Components.

Second, the core characteristic of each component built as a Table Module is that, unlike Domain Model, it has no notion of identity. In other words, each Table Module object represents a set of rows rather than a single row and therefore in order to operate on a single row, the methods of the table module must be passed in identifiers.

When a method of a Table Module is called, it performs its logic against a set of rows passed into it. In Framework applications this maps to a DataSet and is therefore a natural way to represent domain logic. In fact, using Typed DataSets with Table Module is particularly effective since it promotes strong typing at design time leading to fewer runtime errors and better control over the data flowing through the application.

A common approach to handling this is to create a Layer Supertype (a pattern also discussed by Fowler) or base class for all of the Table Modules that accepts a DataSet in its constructor. This also allows the Business Components to be tested without a live connection to a database.

To implement a Table Module approach in the retail application example you could create an abstract BusinessComponentBase class like that shown here. This class is responsible for accepting the DataSet that the class will work on, exposing individual rows in the DataSet using the default (VB) or indexer (C#) property, and exposing the entire set of rows in a readonly property.

As you can see one of the advantages to using Table Module over Transaction Script is that it is easier to encapsulate responsibilities with the appropriate objects. Here the Customers class contains the SendEmail and CheckCredit methods that can be called independently whereas the Transaction Script shown previously would have included inline code to handle this.
The code to implement the BusinessComponentBase class can be seen below.


Public MustInherit Class BusinessComponentBase

Private _ds As DataSet

Private _pk As String

Protected Sub New(ByVal data As DataSet)

_ds = data

_pk = _ds.Tables(0).PrimaryKey(0).ColumnName

End Sub

Default Protected ReadOnly Property Item(ByVal id As Integer) As DataRow

Get

Dim f As String = _pk & " = " & id

Return _ds.Tables(0).Select(f)(0)

End Get

End Property

Protected ReadOnly Property Items() As DataSet

Get

Return _ds

End Get

End Property

End Class


Note that the protected constructor finds the primary key column and stores its value in a private variable used by the Item property to select and return a particular DataRow.


This class can then be inherited by Orders and Customers. The Orders class in C# is shown here.

public class Orders : BusinessComponentBase

{

public new OrdersDs Items

{ get { return (OrdersDs)base.Items; }

}

public Orders(OrdersDs orders):base(orders)

{ }

public ShipType GetShipType(long orderId)

{

// Return the shipping type for the order

}

public double GetShippingCost(long orderId)

{

// Calculate the shipping costs for the order

}

public void SaveOrder(long orderId)

{

// Save the specific order to the database

}

public void SaveOrder()

{

// Save all the orders to the database

}

public long Insert(long productId, int customerId,

long quantity, ShipType ship)

{

// Insert a new row in the DataSet

}

}


The main point to notice here is that the constructor accepts a DataSet of type OrdersDs which is a Typed DataSet. The class then shadows the Items method in order to return a strongly typed DataSet. Also, this is a good place to take advantage of overloading as in the SaveOrder method which can be used to save either one order or all of the orders in the DataSet.

A client can then instantiate the Orders class passing into it the OrdersDs DataSet.
0/5000
Từ: -
Sang: -
Kết quả (Việt) 1: [Sao chép]
Sao chép!
Tổ chức tên miền Logic: Mô-đun bànMô hình thứ hai cho đại diện cho tên miền logic là mô-đun bàn. Như tên của nó mô hình này kêu gọi một thành phần kinh doanh để ánh xạ cho một bảng trong cơ sở dữ liệu. Cấu phần sau đó bao gồm tất cả các phương pháp logic miền cần thiết để thao tác dữ liệu. Không có hai cân nhắc quan trọng ở đây. Đầu tiên, mặc dù tên đề cập đến một bảng, bảng mô-đun cũng có thể được sử dụng tới bản tóm tắt thường xuyên sử dụng các bộ dữ liệu tạo bằng cách tham gia nhiều bảng cùng nhau trong một xem hoặc truy vấn. Điều này làm cho các giao dịch với dữ liệu phức tạp hơn dễ dàng hơn nhiều cho người gọi cho các thành phần kinh doanh. Thứ hai, cốt lõi đặc trưng của mỗi thành phần được xây dựng như là một mô-đun bàn là rằng, không giống như mô hình miền, nó đã không có khái niệm về danh tính. Nói cách khác, mỗi mô-đun bảng đối tượng đại diện cho một tập hợp các hàng chứ không phải là một hàng duy nhất và do đó để hoạt động trên một hàng duy nhất, các phương pháp của các mô-đun bàn phải được thông qua trong định dạng. Khi một phương pháp của một mô-đun bàn được gọi là, nó thực hiện logic chống lại một tập hợp các hàng được thông qua vào nó. Trong khuôn khổ ứng dụng này ánh xạ tới một tập dữ liệu và do đó là một cách tự nhiên để đại diện cho tên miền logic. Trong thực tế, bằng cách sử dụng gõ DataSets với mô-đun bàn là đặc biệt hiệu quả vì nó khuyến khích mạnh mẽ cách gõ vào thời gian thiết kế dẫn đến lỗi thời gian chạy ít hơn và tốt hơn kiểm soát dữ liệu chảy qua các ứng dụng. Một phương pháp phổ biến để xử lý này là tạo ra một lớp Supertype (một mô hình cũng được thảo luận bởi Fowler) hoặc cơ sở lớp cho tất cả các mô-đun bàn mà chấp nhận một tập dữ liệu trong nhà xây dựng của nó. Điều này cũng cho phép các thành phần kinh doanh để được kiểm tra mà không có một kết nối trực tiếp đến một cơ sở dữ liệu. Để thực hiện một bảng mô-đun cách tiếp cận trong bán lẻ ứng dụng ví dụ bạn có thể tạo ra một lớp BusinessComponentBase trừu tượng như thế Hiển thị ở đây. Lớp này chịu trách nhiệm chấp nhận số liệu mà các lớp học sẽ làm việc trên, lộ cá nhân hàng trong bộ dữ liệu bằng cách sử dụng mặc định (VB) hoặc chỉ mục (C#) tài sản, và phơi bày bộ hàng trong một tài sản readonly, toàn bộ. Như bạn có thể thấy một trong những lợi thế để sử dụng mô-đun bàn trong kịch bản giao dịch là nó là dễ dàng hơn để đóng gói các trách nhiệm với các đối tượng thích hợp. Ở đây các lớp khách có SendEmail và CheckCredit các phương pháp có thể được gọi là một cách độc lập trong khi các tập lệnh giao dịch Hiển thị trước đó sẽ có bao gồm nội tuyến mã xử lý này. Mã để thực hiện các lớp học BusinessComponentBase có thể được nhìn thấy dưới đây. Khu vực MustInherit lớp BusinessComponentBase Riêng _ds như bộ dữ liệu Riêng _pk như là Chuỗi Bảo vệ phụ New(ByVal data As DataSet) _ds = dữ liệu _pk = _ds.Tables(0).PrimaryKey(0).ColumnName Cuối tiểu Mặc định bảo vệ ReadOnly bất động sản Item(ByVal id As Integer) như DataRow Nhận được Mờ f là chuỗi = _pk & "=" & id Trở lại _ds.Tables(0).Select(f)(0) Nhận được kết thúc Kết thúc tài sản Bảo vệ tài sản ReadOnly Items() như bộ dữ liệu Nhận được Trở lại _ds Nhận được kết thúc Kết thúc tài sảnCuối lớpLưu ý rằng các nhà xây dựng được bảo vệ thấy cột quan trọng chính và cửa hàng giá trị của nó trong một biến tư nhân được sử dụng bởi nhà hàng để lựa chọn và trở lại một DataRow đặc biệt. Lớp này sau đó có thể được thừa kế bởi đơn đặt hàng và khách hàng. Lớp đơn đặt hàng trong C# Hiển thị ở đây. công cộng lớp đơn đặt hàng: BusinessComponentBase{ khu vực mới OrdersDs mục {nhận được {trở lại (OrdersDs) cơ sở.Mục; } } khu vực đơn đặt hàng (OrdersDs orders):base(orders) { } khu vực ShipType GetShipType(long orderId) { Trở về các loại hình vận chuyển cho đơn đặt hàng } khu vực đôi GetShippingCost (dài orderId) { Tính toán chi phí vận chuyển cho đơn đặt hàng } khu vực vô hiệu SaveOrder (dài orderId) { Lưu thứ tự cụ thể vào cơ sở dữ liệu } khu vực vô hiệu SaveOrder() { Lưu tất cả các đơn đặt hàng vào cơ sở dữ liệu } khu vực long chèn (dài productId, int customerId, số lượng dài, ShipType tàu) { Chèn một dòng mới trong bộ dữ liệu }}Vấn đề chính để thông báo ở đây là các nhà xây dựng chấp nhận một tập dữ liệu của loại OrdersDs đó là một tập dữ liệu đã nhập. Các lớp học sau đó bóng phương pháp mục để trở lại một tập dữ liệu mạnh mẽ đánh máy. Ngoài ra, đây là một nơi tốt để tận dụng lợi thế của quá tải như trong phương pháp SaveOrder có thể được sử dụng để tiết kiệm hoặc đặt hàng một hoặc tất cả các đơn đặt hàng trong bộ dữ liệu. Một khách hàng sau đó có thể nhanh chóng lớp đơn đặt hàng đi vào nó tập dữ liệu OrdersDs.
đang được dịch, vui lòng đợi..
Kết quả (Việt) 2:[Sao chép]
Sao chép!

Tổ chức tên miền Logic: Bảng đun
Mô hình thứ hai cho đại diện luận lý tên miền là Bảng Module. Như tên của nó mô hình này đòi hỏi một phần kinh doanh để ánh xạ một bảng trong cơ sở dữ liệu. Các thành phần đó chứa tất cả các phương pháp luận lý tên miền cần thiết để thao tác dữ liệu. Có hai cân nhắc quan trọng ở đây. Thứ nhất, mặc dù tên đề cập đến một bảng, Bảng Module còn có thể được sử dụng để tóm tắt bộ thường xuyên sử dụng các dữ liệu được tạo ra bằng cách tham gia nhiều bảng với nhau trong khung cảnh hoặc truy vấn. Điều này làm việc với dữ liệu phức tạp hơn dễ dàng hơn nhiều cho người gọi để các thành phần kinh doanh. Thứ hai, các đặc tính cốt lõi của mỗi thành phần được xây dựng như một Table Module là, không giống như Domain Model, nó không có khái niệm về bản sắc. Nói cách khác, mỗi đối tượng Bảng đun đại diện cho một tập hợp các hàng chứ không phải là một hàng duy nhất và do đó để hoạt động trên một hàng duy nhất, các phương pháp của các mô-đun bảng phải được thông qua trong định danh. Khi một phương thức của một Table Module được gọi là , nó thực hiện logic của nó chống lại một tập hợp các hàng thông qua vào nó. Trong các ứng dụng khung bản đồ này vào một DataSet và do đó là một cách tự nhiên để đại diện luận lý tên miền. Trong thực tế, sử dụng DataSets Typed với Bảng Module là đặc biệt hiệu quả vì nó thúc đẩy gõ mạnh vào thời gian thiết kế dẫn đến các lỗi thời gian chạy ít hơn và kiểm soát tốt hơn các dữ liệu qua các ứng dụng. Một phương pháp phổ biến để xử lý này là để tạo ra một lớp siêu kiểu (một mô hình này cũng được thảo luận bởi Fowler) hoặc lớp cơ sở cho tất cả các Modules Bảng nhận vào một DataSet trong constructor của nó. Điều này cũng cho phép các thành phần kinh doanh để được kiểm tra mà không có một kết nối trực tiếp đến một cơ sở dữ liệu. Để thực hiện một cách tiếp cận Bảng Module trong các ví dụ ứng dụng bán lẻ, bạn có thể tạo ra một lớp BusinessComponentBase trừu tượng như những gì thể hiện ở đây. Lớp này là trách nhiệm chấp nhận các DataSet rằng lớp sẽ làm việc trên, để lộ hàng cá nhân trong DataSet bằng cách sử dụng mặc định (VB) hoặc indexer (C #) tài sản, và phơi bày toàn bộ các hàng trong một thuộc tính chỉ đọc. Như bạn có thể nhìn thấy một trong những lợi thế để sử dụng Bảng đun qua giao dịch Script là nó dễ dàng hơn để đóng gói trách nhiệm với các đối tượng thích hợp. Ở đây các lớp khách hàng có chứa các phương pháp SendEmail và CheckCredit có thể được gọi là độc lập trong khi các Script giao dịch thể hiện trước đó sẽ bao gồm mã nội tuyến để xử lý này. Các mã để thực hiện các lớp BusinessComponentBase có thể được nhìn thấy dưới đây. Công MustInherit Lớp BusinessComponentBase _ds Private Như DataSet _pk tin As String Protected Sub New (ByVal dữ liệu DataSet) _ds = dữ liệu _pk = _ds.Tables (0) .PrimaryKey (0) .ColumnName End Sub Mặc định bảo vệ tài sản ReadOnly Item (ByVal id As Integer) As DataRow Nhận Dim f Như String = _pk & "=" & id Return _ds.Tables (0) .Select (f) (0) End Get Cuối bất động sản được bảo vệ mục tài sản ReadOnly () As DataSet Get Return _ds Cuối Get Cuối bất động sản End Class Lưu ý rằng các nhà xây dựng bảo vệ tìm thấy các cột khóa chính và lưu trữ giá trị của nó trong một biến tư nhân được sử dụng bởi những mục tài sản để lựa chọn và trả về một DataRow cụ thể. Lớp này sau đó có thể được thừa kế bởi các đơn đặt hàng và khách hàng. Các lớp Orders trong C # được hiển thị ở đây. Đơn đặt hàng công lớp: BusinessComponentBase { công mới OrdersDs Items {get {return (OrdersDs) base.Items; } } Đơn đặt hàng công (OrdersDs đơn đặt hàng): base (đơn đặt hàng) {} công ShipType GetShipType (OrderID dài) { // Return loại vận chuyển cho các đơn hàng } public double GetShippingCost (OrderID dài) { // Tính toán chi phí vận chuyển cho các đơn hàng } public void SaveOrder (OrderID dài) { // Lưu trình tự cụ thể để các cơ sở dữ liệu } public void SaveOrder () { // Lưu tất cả các đơn đặt hàng cho các cơ sở dữ liệu } Chèn dài công cộng (dài ProductID, int ID khách hàng, số lượng dài, ShipType tàu ) { // Chèn một hàng mới trong DataSet } } Các điểm chính để nhận thấy ở đây là các nhà xây dựng chấp nhận một DataSet loại OrdersDs mà là một Typed DataSet. Các lớp sau đó bóng của các phương pháp Items để trả về một DataSet gõ mạnh. Ngoài ra, đây là một nơi tốt để tận dụng lợi thế của quá tải như trong phương pháp SaveOrder mà có thể được sử dụng để tiết kiệm hoặc một đơn hàng hoặc tất cả các đơn đặt hàng trong DataSet. sau đó Một khách hàng có thể nhanh chóng lớp Orders đi vào đó thì OrdersDs DataSet.
























































































































đang được dịch, vui lòng đợi..
 
Các ngôn ngữ khác
Hỗ trợ công cụ dịch thuật: Albania, Amharic, Anh, Armenia, Azerbaijan, Ba Lan, Ba Tư, Bantu, Basque, Belarus, Bengal, Bosnia, Bulgaria, Bồ Đào Nha, Catalan, Cebuano, Chichewa, Corsi, Creole (Haiti), Croatia, Do Thái, Estonia, Filipino, Frisia, Gael Scotland, Galicia, George, Gujarat, Hausa, Hawaii, Hindi, Hmong, Hungary, Hy Lạp, Hà Lan, Hà Lan (Nam Phi), Hàn, Iceland, Igbo, Ireland, Java, Kannada, Kazakh, Khmer, Kinyarwanda, Klingon, Kurd, Kyrgyz, Latinh, Latvia, Litva, Luxembourg, Lào, Macedonia, Malagasy, Malayalam, Malta, Maori, Marathi, Myanmar, Mã Lai, Mông Cổ, Na Uy, Nepal, Nga, Nhật, Odia (Oriya), Pashto, Pháp, Phát hiện ngôn ngữ, Phần Lan, Punjab, Quốc tế ngữ, Rumani, Samoa, Serbia, Sesotho, Shona, Sindhi, Sinhala, Slovak, Slovenia, Somali, Sunda, Swahili, Séc, Tajik, Tamil, Tatar, Telugu, Thái, Thổ Nhĩ Kỳ, Thụy Điển, Tiếng Indonesia, Tiếng Ý, Trung, Trung (Phồn thể), Turkmen, Tây Ban Nha, Ukraina, Urdu, Uyghur, Uzbek, Việt, Xứ Wales, Yiddish, Yoruba, Zulu, Đan Mạch, Đức, Ả Rập, dịch ngôn ngữ.

Copyright ©2025 I Love Translation. All reserved.

E-mail: