markdown:
Đang truy cập : 19
Hôm nay : 409
Tháng hiện tại : 9598
**Tổng lượt truy cập : 1088207**
[Máy nước nóng Ferroli](/shops/May-nuoc-nong-truc-tiep-Ferroli/May-nuoc-nong-Ferroli-785/)
Mã sản phẩm:
**Ferroli Divo SSN**
Đăng ngày 08-04-2014 04:55:10 PM
Giá :
**2 250 000 VND**
Loại máy nước nóng: Trực tiếp Hỗ trợ bơm: không Vòi sen: 3 chế độ phun Cảm biến dòng chảy: Có Màu sắc: Trắng
[Máy nước nóng Ferroli](/shops/May-nuoc-nong-truc-tiep-Ferroli/May-nuoc-nong-Ferroli-784/)
Mã sản phẩm:
**Ferroli Divo SSP**
Đăng ngày 08-04-2014 04:48:47 PM
Giá :
**2 830 000 VND**
Loại máy nước nóng: Trực tiếp Hỗ trợ bơm: Có Bơm siêu êm: Có Bảng điều khiển: Nút xoay Công suất tiêu thụ: 4.5KW
[Máy năng lượng mặt trời Ferroli](/shops/May-nuoc-nong-truc-tiep-Ferroli/May-nang-luong-mat-troi-Ferroli-781/)
Mã sản phẩm:
**Single 120L**
Đăng ngày 08-04-2014 04:15:16 PM
Giá :
**19 800 000 VND**
16 830 000 VND
Thông số mô tả: Bình năng lượng mặt trời ECOTOP Single 120L Bình năng lượng mặt trời dạng tấm Tank 120L: 1 Panel
[Máy nước nóng trực tiếp Ferroli](/shops/May-nuoc-nong-truc-tiep-Ferroli/May-nuoc-nong-truc-tiep-Ferroli-448/)
Mã sản phẩm:
**DIVOSDN 4.5S**
Đăng ngày 21-06-2013 05:06:24 PM
Giá :
**2 300 000 VND**
» Loại máy nước nóng: Trực tiếp » Hỗ trợ bơm: Không » Bảng điều khiển: Màn hình LED » Công suất tiêu thụ: 4.5KW » Màu sắc: Trắng
[Máy nước nóng trực tiếp Ferroli](/shops/May-nuoc-nong-truc-tiep-Ferroli/May-nuoc-nong-truc-tiep-Ferroli-447/)
Mã sản phẩm:
**DIVOSDP 4.5S**
Đăng ngày 21-06-2013 04:55:53 PM
Giá :
**3 100 000 VND**
Loại máy nước nóng: Trực tiếp » Hỗ trợ bơm: Có » Bơm siêu êm: Có » Màn hình hiển thị:LED » Công suất tiêu thụ: 4.5KW
[Máy nước nóng trực tiếp Ferroli](/shops/May-nuoc-nong-truc-tiep-Ferroli/May-nuoc-nong-truc-tiep-Ferroli-446/)
Mã sản phẩm:
**DIVOSSP4.5S**
Đăng ngày 21-06-2013 04:42:26 PM
Giá :
**2 700 000 VND**
» Loại máy nước nóng: Trực tiếp » Hỗ trợ bơm: Có » Bơm siêu êm: Có » Bảng điều khiển: Nút xoay » Công suất tiêu thụ: 4.5KW
[Máy nước nóng trực tiếp Ferroli](/shops/May-nuoc-nong-truc-tiep-Ferroli/May-nuoc-nong-truc-tiep-Ferroli-445/)
Mã sản phẩm:
**DIVOSSN 4.5S )**
Đăng ngày 21-06-2013 04:32:05 PM
Giá :
**2 200 000 VND**
» Loại máy nước nóng: Trực tiếp » Hỗ trợ bơm: không » Vòi sen: 3 chế độ phun » Cảm biến dòng chảy: Có » Màu sắc: Trắng

Content-Language: vi

Cache-Control: no-cache, pre-check=0, post-check=0

Set-Cookie: nv3c_Abnsv_nvvithemever=mQ%2C%2C; expires=Mon, 20-May-2019 10:00:05 GMT; path=/; domain=.noithatduchan.com; httponly


markdown:
##
Posted On Friday, May 30, 2008 at
at
[Một câu chuyện về Bridge Pattern](http://nthoai.blogspot.com/2008/05/mot-cau-chuyen-ve-bridge-pattern.html)
[5:16 PM](http://nthoai.blogspot.com/2008/05/mot-cau-chuyen-ve-bridge-pattern.html)by Van Nguyen [](https://www.blogger.com/post-edit.g?blogID=3978293580246860892&postID=5062934943406602081&from=pencil)
- Mẫu thiết kế Bridge được thiết kế với ý tưởng tách rời những xử lý của một lớp ra lớp khác, từ đó có thể dễ dàng biến đổi hoặc thay thế mà không làm ảnh hưởng đến những nơi có sử dụng lớp ban đầu. Điều này có thể hiểu như sau: bạn thiết kế một lớp với rất nhiều xử lý, bây giờ bạn không muốn để những xử lý đó trong lớp của bạn nữa, bạn sẽ tạo ra một lớp mới và move toàn bộ những xử lý đó sang lớp mới. Khi đó trong lớp cũ sẽ giữ một đối tượng thuộc về lớp mới, và đối tượng này sẽ chịu trách nhiệm xử lý thay cho lớp ban đầu. Tại sao chúng ta làm như vậy và cách thực hiện như thế nào? Hi vọng với bài viết này chúng ta tìm được lời giải thích cho 2 câu hỏi trên.
- Mẫu Bridge về khía cạnh nào đó khá giống với mẫu
[Adapter](http://nthoai.blogspot.com/search/label/Adapter%20Pattern) ở chỗ: người ta sẽ nhờ vào một lớp khác để thực hiện một số xử lý nào đó. Tuy nhiên, ý nghĩa và mục đích sử dụng của hai mẫu thiết kế này hoàn toàn khác nhau. Mẫu Adapter Pattern hay còn gọi là [Wrapper pattern](http://en.wikipedia.org/wiki/Wrapper_pattern) được dùng để biến đổi một lớp/interface sang một dạng khác có thể sử dụng được. Adapter Pattern giúp nhiều lớp có thể làm việc với nhau dễ dàng mà bình thường không thể. Một trường hợp tôi gặp phải và có thể áp dụng Adapter Pattern là khi tôi không thể kế thừa lớp A nhưng muốn làm một lớp B có những xử lý tương tự như lớp A. Khi đó tôi làm lớp B như sau, các xử lý của B sẽ gọi những xử lý của A khi cần
Hình 1: Ví dụ về mẫu Adapter
- Đó chỉ là một trong nhiều cách sử dụng có thể có của mẫu Adapter, tôi sẽ nói thêm về
[Adapter](http://nthoai.blogspot.com/search/label/Adapter%20Pattern)trong một bài viết khác, ở đây chỉ nêu ra ý nghĩa khác nhau của hai mẫu thiết kế này. Trước khi đi vào câu chuyện của mẫu Bridge, chúng ta hãy xem sơ đồ lớp của mẫu Bridge:
Hình 2: Sơ đồ lớp của mẫu Bridge
Câu chuyện về mẫu thiết kế Bridge (Bridge Pattern)
- Có một người đã làm nghề đầu bếp đã 20 năm. Ông ta đã đi rất nhiều nơi trên thế giới, làm việc cho rất nhiều nhà hàng khác nhau và đã học được cách nấu rất nhiều món ngon. Không những thế ông ta còn sáng tạo ra những món đặc biệt cho riêng mình nữa. Nhờ tài nghệ của ông, các nhà hàng nơi ông làm luôn luôn đông khách. Sau 20 năm nhìn lại, ông thấy đã đến lúc mình phải mở nhà hàng cho riêng mình. Đã để dành được một số vốn kha khá, ông quyết định chọn một trong những thành phố năng động của Việt Nam là TPHCM để bắt đầu sự nghiệp riêng. Thế là nhà hàng của ông ta ra đời và kinh doanh khá phát đạt nhờ vào danh tiếng và tài nghệ của mình. Ông ta dành hết tâm huyết để tự tay nấu mọi món ngon nhất cho các thực khách vì không tin tưởng vào các phụ bếp được thuê. Càng ngày danh tiếng của nhà hàng càng được nhiều người biết đến, không chỉ những người sành ăn trong nước mà cả những du khách nước ngoài cũng tìm đến nhà hàng này để thưởng thức khi có cơ hội ghé đến TPHCM. Ông ta rất vui mừng trước doanh thu ngày càng cao nhưng bên cạnh đó cũng rất lo cho sức khỏe của mình, vì ông phải đứng chế biến món ăn từ 6h sang đến 11h đêm hằng ngày
![31 :bbpbuon:](http://igame.vn/f/images/smilies/BBP_smilies/31.gif)
- Các con của ông rất thương bố mình và khuyên ông nên truyền nghề lại cho các học trò, các người ấy sẽ giúp ông làm việc cho nhà hàng. Suy nghĩ khá lâu, ông thấy rằng các con ông nói rất có lý. Ông ta chọn 1 đứa học trò ngoan và giỏi nhất truyền toàn bộ những gì mình biết. Sau khi đã lĩnh hội được toàn bộ khóa học, đứa học trò đã phụ ông nấu nướng cho nhà hàng, nhờ vậy ông được rảnh rổi về sớm đi tập thể dục thẩm mỹ và làm những việc quản lý, mở rộng kinh doanh.
- Thời gian trôi qua, ông muốn mở thêm một nhà hàng mới ở HN. Cũng trong giai đoạn này, ông nhận được email của một số khách ruột bảo rằng chất lượng món ăn bắt đầu kém đi, không đậm đà như trước đây. Sau khi tìm hiểu, ông phát hiện nguyên nhân là do thằng học trò đểu cáng đang âm mưu mở nhà hàng riêng nên nó lơ là việc nấu nướng
![23 :bbpnodo:](http://igame.vn/f/images/smilies/BBP_smilies/23.gif)
Hình 3: Bản kế hoạch mở 2 nhà hàng mới của ông
// Bridge pattern -- Structural example
using System;
namespace nthoai.blogspot.com.BridgePattern
{
// "Abstraction"
class NhaHang
{
protected DauBep _dauBep;
// Property
public DauBep DauBep
{
set { _dauBep = value; }
}
public virtual void CheBienMonAn()
{
_dauBep.CheBienMonAn();
}
}
// "Implementor"
abstract class DauBep
{
public abstract void CheBienMonAn();
}
// "Nhà hàng món Huế"
class NhaHangMonHue : NhaHang
{
public override void CheBienMonAn()
{
_dauBep.CheBienMonAn();
}
}
// "Nhà hàng món miền Nam"
class NhaHangMienNam : NhaHang
{
public override void CheBienMonAn()
{
_dauBep.CheBienMonAn();
}
}
// "ConcreteImplementorA"
class DauBepMonAnHue : DauBep
{
public override void CheBienMonAn()
{
Console.WriteLine("Đây là những món ăn Huế do đầu bếp Huế thực hiện");
}
}
// "ConcreteImplementorB"
class DauBepMonAnMienNam : DauBep
{
public override void CheBienMonAn()
{
Console.WriteLine("Đây là những món ăn miền Nam do đầu bếp miền Nam thực hiện");
}
}
// Ông đầu bếp mở nhà hàng như sau
class ÔngĐầuBếpGià
{
static void Main()
{
NhaHang _nhaHangMonHue = new NhaHangMonHue();
// Set implementation and call
_nhaHangMonHue.DauBep = new DauBepMonAnHue();
_nhaHangMonHue.CheBienMonAn();
NhaHang _nhaHangMonMienNam = new NhaHangMienNam();
// Change implemention and call
_nhaHangMonMienNam.DauBep = new DauBepMonAnMienNam();
_nhaHangMonMienNam.CheBienMonAn();
// Wait for user
Console.Read();
}
}
}
Hình 4: Kế hoạch mở nhà hàng :D
- Câu chuyện của ông đầu bếp già là một ví dụ về cách sử dụng của Bridge khi đưa những xử lý sang một lớp khác. Trong các tài liệu về mẫu Bridge, các tác giả thường sử dụng các thuật ngữ như: Abstraction, Implementor, RefinedAbstraction và ConcreteImplementor. Cá nhân tôi thấy những từ vô cùng chuyên môn như vậy hơi khó hiểu, tôi thích những ví dụ thực tế hơn, tuy nhiên những từ ấy hoàn toàn chính xác. Sử dụng mẫu Bridge trong lập trình không chỉ đơn giản là đưa những xử lý của một lớp sang lớp khác rồi gọi nó từ lớp mới, mọi việc không chỉ đơn giản như vậy. Ý tưởng trên chỉ là một vế của Bridge Pattern, ở đây chúng ta chưa nói đến vế: “từ đó có thể dễ dàng biến đổi hoặc thay thế mà không phải ảnh hưởng đến những nơi có sử dụng lớp ban đầu” (so you can vary or replace the implementation without changing the client code). Xin thưa với các bạn đây chỉ là cách diễn giải của tôi, không phải khái niệm hay định nghĩa tiếng Việt của Bridge Pattern cho nên nếu các bạn muốn xem nguồn tiếng Anh hãy chịu khó google. Quay lại chỗ “biến đổi, thay thế mà không ảnh hưởng”, tôi đã có viết về chuyện này ở loạt bài về
[Dependency Injection](http://nthoai.blogspot.com/search/label/Dependency%20Injection)của Spring.NET. Trong trường hợp của mẫu Bridge, chúng ta có thể giảm sự phụ thuộc giữa các lớp với nhau bằng cách sử dụng Interface hoặc abstract class. Trong các tài liệu về Bridge Pattern, các Abstraction và Implementer là những lớp abstract hoặc interface. Trong khi đó, các RefinedAbstraction và ConcreteImplementor là những thể hiện cụ thể hay những lớp con của các abstract class/ interface nói trên. Như vậy trong câu chuyện ông đầu bếp của chúng ta thì Abstraction là NhàHàng, RefinedAbstraction chính là Nhà Hàng Món Huế, Nhà Hàng Món Nướng Nam Bộ, Nhà Hàng Châu Âu còn ConcreteImplementor là các đầu bếp: Đầu Bếp Món Âu, Đầu Bếp Món Huế, …
- Như vậy chữ Bridge (chiếc cầu) ở đây là quan hệ “use/have” giữa Abstraction và Implementation, giữa Nhà Hàng và Đầu Bếp. Một RefinedAbstraction sẽ không khai báo cụ thể một ConcreteImplementor nào đang được sử dụng mà chỉ biết nó đang có 1 Implementor nào đó; khi mở một Nhà Hàng mới ta sẽ mướn Đầu Bếp (biết nấu ăn), còn cụ thể đầu bếp nấu được món miền nào sẽ quyết định lúc chọn xong địa điểm
![02 :bbpnghi:](http://igame.vn/f/images/smilies/BBP_smilies/02.gif)
- Trong một số trường hợp, mẫu thiết kế Bridge được dùng như một cầu nối giữa 2 nhóm đối tượng khác nhau, giữa nhóm các dữ liệu và nhóm các cách thể hiện ra màn hình, đó là ví dụ thường được dùng trong các bài viết về mẫu Bridge. Như chúng ta biết có rất nhiều chuẩn hình ảnh như JPG, PNG, BMP, GIF, … và các hệ điều hành khác nhau như Windows, MacOS, UNIX đều hiểu và có thể hiển thị các định dạng ảnh này.
- Cấu trúc hình ảnh và cách hiển thị chúng là hai thành phần quan trọng của một định dạng ảnh. Cấu trúc hình chính là cách mà hình đó được lưu trữ, và cách thể hiện chúng sẽ tương đối khác nhau trên các chương trình xem hình trên các hệ điều hành khác nhau. Trong trường hợp này các file hình với các định dạng khác nhau sẽ thường xuyên thay đổi, và các hệ điều hành cần vẽ hình cũng nhiều tương tự. Nếu được yêu cầu thiết kế lớp cho bài toán trên sao cho tính tái sử dụng cao nhất, bạn sẽ làm thế nào. Như đã nói, có rất nhiều chuẩn hình, mỗi hình sẽ có những thông tin riêng của nó và mỗi hình nên được thiết kế để có khả năng tự vẽ nó (
[Information Expert](http://en.wikipedia.org/wiki/GRASP_%28Object_Oriented_Design%29#Information_Expert)) . Nhưng vì cách vẽ sẽ khác nhau trên các hệ điều hành khác nhau nên nếu chúng ta thiết kế lớp hình tự thực hiện hàm vẽ rồi khi cần thì sửa hàm vẽ để nó hoạt động được trên hệ điều hành khác là không nên. Bridge Pattern sẽ giúp ta đưa những hàm vẽ đó sang những lớp khác để vẽ trên các hệ điều hành tương ứng. Nhờ vậy, khi một chuẩn hình mới được tạo ra hay có một thuật toán vẽ khác được nghĩ ra, sẽ rất dễ dàng để ta code thêm một lớp vẽ mới cho chương trình.
- Một ví dụ khác cũng tương tự là khi bạn cần xây dựng một ứng dụng thể hiện ra màn hình thông tin khác nhau với những loại user khác nhau. Cùng một dữ liệu nhưng nếu là Admin bạn sẽ cho phép hiển thị chi tiết hơn, có thêm những button cho phép edit hoặc delete chẳng hạn. Trong khi đó user thường hoặc guest chỉ có thể xem mà không thể làm gì khác. Còn rất nhiều trường hợp khác mà chúng ta có thể dùng Bridge cũng như có nhiều mẫu thiết kế tương tự Bridge như Strategy, Adaptor. Nếu chúng ta nắm được ý nghĩa, sự khác nhau và khi nào nên áp dụng những thiết kế này của 4 lão tiền bối thì công việc lập trình sẽ hứng thú, đầy tính sáng tạo và không nhàm chán chút nào. Hi vọng đến đây chúng ta đã tìm được câu trả lời cho 2 câu hỏi trên. Tôi sẽ bàn thêm một chút về những lợi ích và trở ngại khi sử dụng Bridge:
Benefits in using Bridge Pattern
1/ Đặt vấn đề: chúng ta có một lớp A, và các lớp A1, A2, A3 kế thừa từ lớp A. Các lớp A1, A2, A3 sẽ được thừa hưởng các attribute và behavior của lớp A. Như vậy vô tình các xử lý của lớp A1, A2, A3 sẽ y như A trừ khi chúng phải override lại. Trong chương trình, khi cần sử dụng một trong các lớp A1, A2, A3 người ta thường khai báo chung chung là A thay vì khai báo cụ thể là ta sẽ gọi mày đó A1, A2, A3. Cách sử dụng lớp A ta gọi là abstraction hay là trừu tượng hóa và những xử lý của lớp A mà các A1, A2, A3 thừa hưởng gọi là implementation. Sử dụng thiết kế Bridge sẽ giúp chúng ta giảm sự phục thuộc giữa abstraction và implementation. Tính kế thừa trong hướng đối tượng thường gắn chặt abstraction và implementation lúc build chương trình. Bridge Pattern có thể được dùng để cắt đứt sự phụ thuộc này và cho phép chúng ta chọn implementation phù hợp lúc runtime.
2/ Giảm số lượng những lớp con không cần thiết. Một số trường hợp sử dụng tính inheritance sẽ tăng số lượng subclass vô tội vạ. Ví dụ trường hợp chương trình xem hình trên các hệ điều hành khác nhau, ta có 6 loại hình và 3 hệ điều hành. Sử dụng inheritance trong trường hợp này sẽ làm ta thiết kế 18 lớp trong khi áp dụng Bridge sẽ giảm số lượng lớp xuống 9
![15 :bbpcuoi1:](http://igame.vn/f/images/smilies/BBP_smilies/15.gif)
3/ Lợi ích thứ 2 dẫn đến một hệ quả: Code sẽ gọn gàn hơn và dẫn đến kích thước ứng dụng sẽ nhỏ hơn.
4/ Các Abstraction và Implementation của nó sẽ dễ dàng thay đổi lúc runtime cũng như khi cần thay đổi thêm bớt trong tương lai. Như vậy chương trình của chúng ta cũng sẽ dễ bảo trì hơn.
5/ Tương tự như lợi ích 4, nếu sử dụng Bridge, hệ thống sẽ dễ mở rộng về sau. Đây hầu như là một yêu cầu bắt buộc đối với các chương trình lớn. Nhiều công ty sẽ cùng làm trong từng giai đoạn phát triển. Một số công ty phần mềm ở VN thường làm outsource: maintain hoặc mở rộng một framework hay một chương trình đã được làm sẵn ở nước ngoài. Công ty khách hàng sẽ yêu cầu chúng ta thêm module cho ứng dụng có sẵn nhưng không được sửa đổi framework/ứng dụng có sẵn của họ vì các framework/ứng dụng đó có thể được công ty nâng cấp lên version mới. Đó là bài toán các bạn sẽ gặp phải khi làm ở những project trung bình và lớn, và ta sẽ vô cùng bực mình và cảm thấy khó khăn khi framework/chương trình đó được đám lập trình viên ở đâu đâu code vô cùng chuối giờ lại bắt mình viết thêm vào
![21 :bbptuc:](http://igame.vn/f/images/smilies/BBP_smilies/21.gif)
6/ Những nơi cần sử dụng các abstraction sẽ hoàn toàn độc lập với các implementation.Ví dụ các lớp khác của chương trình xem ảnh sẽ độc lập với thuật toán vẽ ảnh trong các implementation. Như vậy ta có thể update chương trình xem ảnh khi có một thuật toán vẽ ảnh mới mà không cần phải sửa đổi nhiều thậm chí build lại toàn chương trình nếu có dùng các kĩ thuật
[Dependency Injection](http://nthoai.blogspot.com/search/label/Dependency%20Injection).
1 Drawbacks in using Bridge Pattern
- Khi sử dụng Bridge Pattern, chúng ta đã tăng số lần gọi gián tiếp lên hai. Trong ví dụ trên, với cách làm cũ, lớp Image sẽ thực hiện hàm vẽ của chính nó. Nếu áp dụng Bridge, hàm vẽ sẽ được gọi thông qua một lớp implementation tương tứng như vậy có thêm một lần khởi tạo đối tượng và gọi đối tượng, có thêm một lần hủy đối tượng và lượng bộ nhớ bị chiếm để chạy chương trình sẽ tăng lên một chút. Theo tôi những bất lợi này vô cùng không đáng kể so với những lợi ích mang lại khi chúng ta áp dụng Design Pattern nói chung và Bridge Pattern nói riêng.
-----------------------------------------------------------------
- Cuối cùng, ông đầu bếp già của chúng ta sẽ không có thời gian đi massage hay đi chơi gôn nếu cứ tiếp tục tự nấu ăn. Nhà hàng của ông sẽ rất khó khăn khi đầu bếp chính nghỉ việc nếu không có nhiều đầu bếp giỏi chuyên môn. Thử tưởng tượng trong thực tế chúng ta mua một chiếc xe gắn máy mà khi hư thì phải bỏ đi và mua xe mới thay vì có phải tìm phụ tùng thay thế. Tính độc lập, chuyên môn hóa giữa các bộ phận trong một hệ thống luôn được đề cao trên mọi lĩnh vực trong cuộc sống. Riêng trong thiết kế phần mềm, design pattern là những bài học kinh nghiệm mà khi áp dụng tốt sẽ biến người lập trình thành một nghệ sĩ. Một lần nữa, tôi hi vọng bài viết này không chỉ giúp các bạn biết Bridge Pattern là gì mà còn hiểu được tại sao và khi nào cần nó. Tóm lại, cách sử dụng inheritance một cách máy móc có thể vô tình dán chặt những abstraction và implementation với nhau trong khi một số ứng dụng cần điều ngược lại. Bridge Pattern có thể được sử dụng khi một abstraction có nhiều implementation và cả 2 nhóm có thể có nhiều thay đổi mà không phụ thuộc hoặc ảnh hưởng gì nhóm còn lại
![39 :bbpcuoi5:](http://igame.vn/f/images/smilies/BBP_smilies/39.gif)
Các tài liệu tham khảo:
[Bridge Design Pattern in C# and VB.NET](http://www.dofactory.com/Patterns/PatternBridge.aspx) [http://www.informit.com/articles/article.aspx?p=30297](http://www.informit.com/articles/article.aspx?p=30297) [http://www.c-sharpcorner.com/UploadFile/rajeshvs/BridgePattern](http://www.c-sharpcorner.com/UploadFile/rajeshvs/BridgePatternsinCS11142005010604AM/BridgePatternsinCS.aspx) [http://en.wikipedia.org/wiki/Bridge_pattern](http://en.wikipedia.org/wiki/Bridge_pattern) [http://www.codeguru.com/cpp/cpp/cpp_mfc/patterns/article.php/c817/](http://www.codeguru.com/cpp/cpp/cpp_mfc/patterns/article.php/c817/) [http://en.wikipedia.org/wiki/Wrapper_pattern](http://en.wikipedia.org/wiki/Wrapper_pattern) [http://www.dofactory.com/Patterns/PatternAdapter.aspx](http://www.dofactory.com/Patterns/PatternAdapter.aspx)
##
Posted On Tuesday, May 27, 2008 at
at
[Sử dụng Singleton Pattern trong C#](http://www.yoda.arachsys.com/csharp/singleton.html)
[8:18 PM](http://nthoai.blogspot.com/2008/05/su-dung-singleton-trong-csharp.html)by Van Nguyen [](https://www.blogger.com/post-edit.g?blogID=3978293580246860892&postID=503650418044699177&from=pencil)
- Trong loạt bài dịch về
[Spring.NET](http://nthoai.blogspot.com/search/label/Spring.NET) tôi đã có cơ hội chia sẽ với các bạn một mẫu Design Pattern khá hấp dẫn là Singleton. Sau bài viết đó, tôi cũng muốn viết thêm một ít về mẫu thiết kế này. Thật may khi tôi vô tình tìm được một [bài viết rất hay](http://www.yoda.arachsys.com/csharp/singleton.html) về chủ đề này. Trong bài, tác giả đề cập đến khá nhiều vấn đề lí thú khác có liên quan đến lập trình, đặc biệt là tính [lazy-load](http://en.wikipedia.org/wiki/Lazy_initialization) và [thread-safe](http://en.wikipedia.org/wiki/Thread-safety) của đối tượng. Vì vậy, tôi quyết định nấu nướng nó, 1 là để chia sẻ với những ai quan tâm, 2 là để nâng cao khả năng đọc hiểu của tôi , và tất nhiên là khả năng viết lách nữa hê hê
.
- Trước khi đọc bài này, các bạn nên nắm trước và hiểu một số thuật ngữ, từ khóa và kĩ thuật trong C# như : base class, sub class, constructor, member, seal, private, public, protected, static, instance, reference, property, performance, thread, multi-thread, lock, lazy-load. Đa số từ khóa trên theo tôi nghĩ các bạn học lập trình đều đã biết đến, cá nhân tôi cũng phải tự tìm hiểu trong quá trình làm việc khi lần đầu tiên gặp những kĩ thuật như lock và lazy-load
. Cho nên trước khi viết, tôi xin giới thiệu sơ qua hai kĩ thuật này. Ngoài ra, trong bài viết có khi tôi sử dụng chữ “instance” và “đối tượng”, hai từ này đều có ý nghĩa vai trò như nhau. Tôi nghĩ có một số từ tôi sẽ giữ nguyên tên tiếng Anh mà không dịch ra tiếng Việt như: thread, multi-thread, performance, …. vì khi được dịch ra đọc thấy nó rất chuối
, hơn nữa những từ tiếng Anh này cũng khá quen thuộc với chúng ta, ai làm lập trình cũng có thể hiểu được. Và cuối cùng, trong bài dịch tôi có thêm vào một số ý kiến của mình, các bạn sẽ dễ dàng phân biệt các ý kiến của tôi với phần dịch khi thấy icon sau "
"
![ Singleton Pattern](http://img167.imageshack.us/img167/6327/singletonod0.png)
Singleton Pattern
- Khi lập trình
[multi-thread](http://en.wikipedia.org/wiki/Thread_%28computer_science%29), chắc chắn các bạn sẽ gặp phải vấn đề đau đầu gọi là đồng bộ hóa tiến trình. Lúc trước tôi học về vấn đề này trong trường đại học ở môn “Hệ điều hành nâng cao”. ![17 :bbpcuoi3:](http://igame.vn/f/images/smilies/BBP_smilies/17.gif)
![57 :bbpktay2:](http://igame.vn/f/images/smilies/BBP_smilies/57.gif)
- Kế tiếp, xin nói sơ qua về
[lazy-load](http://en.wikipedia.org/wiki/Lazy_initialization)hay [lazy initialization](http://en.wikipedia.org/wiki/Lazy_initialization). Đó là một kĩ thuật giúp chúng ta delay lại qua trình tạo ra đối tượng, quá trình tính toán, … và chỉ thực thi quá trình đó đến khi nào nó thực sự cần đến. Về nguyên tắc, kĩ thuật này có thể đạt được bằng cách sử dụng một cờ để kiểm tra xem quá trình của chúng ta có diễn ra hay chưa, nếu chưa thì sẽ thực hiện còn nếu đã làm rồi thì chỉ cần trả về giá trị được lưu của lần thực thi trước đó hoặc đơn giản chẳng làm gì cả. Trong thực tế thì kĩ thuật này sẽ được áp dụng nhiều trong các framework [ORM](http://madgeek.com/Articles/ORMapping/EN/mapping.htm). Tôi xin nói một ví dụ: giả sử bạn có 1 database với 2 bảng lưu thông tin lớp học và học sinh với ràng buộc một lớp học có thể có nhiều học sinh. Tương ứng với 2 bảng trong cơ sở dữ liệu thì trong chương trình của bạn có 2 lớp là Class và Student. Trong lớp Class sẽ có một member StudentList thuộc kiểu List ![08 :bbpnen:](http://igame.vn/f/images/smilies/BBP_smilies/08.gif)
- Mẫu thiết kế
[Singleton](http://nthoai.blogspot.com/search/label/Singleton)là một trong những mẫu thông dụng và được sử dụng rộng rãi nhất trong kĩ thuật lập trình. Về nguyên tắc, một Singleton là một lớp chỉ cho phép một đối tượng tương ứng được tạo, và tất nhiên nó cũng phải có một public member để những đối tượng khác có thể truy xuất instance Singleton này. Thông thường, cách thiết kế lớp theo kiểu Singleton sẽ không sử dụng hàm khởi tạo có tham số, nếu không thì một yêu cầu khởi tạo đối tượng với các tham số khác nhau sẽ gây rắc rối. (Nếu cùng một instance được gọi bằng hàm getInstance với những tham số khác nhau thì ta dùng mẫu thiết kế [Factory Method](http://nthoai.blogspot.com/search/label/Factory%20Method)sẽ hợp lý hơn) Bài viết này chỉ đề cập đến những Singletons với hàm khởi tạo không tham số, hay hàm getInstance() không có tham số. Nói chung, khi người ta sử dụng Singleton vì tính lazy-load của nó, instance của lớp sẽ không cần được tạo đến khi nào nó thật sự cần thiết.
- Có khá nhiều cách để thiết kế Singleton trong C#. Tác giả sẽ thể hiện từng cách từ đơn giản đến phức tạp, bắt đầu bằng cách thông dụng nhất- cách không có tính thread-safe (an toàn khi sử dụng với thread) đến những cách có tính thread-safe và hỗ trợ lazy-loaded; đơn giản cũng như performance cao. Trong những ví dụ code mẫu ở trong bài viết, tác giả sẽ sử dụng từ khóa private mặc định cho các member của lớp. Trong nhiều ngôn ngữ khác như Java, có thể sẽ khác đi đôi chút tuy nhiên từ khóa private vẫn nên được sử dụng.
- Dù có nhiều cách thực hiện, tất cả những phương pháp tôi giới thiệu ở trong bài viết này đều có thể sử dụng một trong những điều sau để thiết kế Singleton:
• Có sử dụng một hàm khởi tạo không tham số và được khai báo private, làm như vậy sẽ không cho những lớp khác khởi tạo nó. Ngoài ra, khai báo hàm khởi tạo private cũng không cho những lớp con kế thừa, vì nếu một lớp được thiết kế theo kiểu Singleton thì nó có thể có hai hoặc nhiều lớp con và nếu mỗi lớp con đều có thể tạo ra instance thì mẫu thiết kế Singleton sẽ không còn đúng.
![ http://img145.imageshack.us/img145/5899/commentdz0.gif](http://img145.imageshack.us/img145/5899/commentdz0.gif)
![39 :bbpcuoi5:](http://igame.vn/f/images/smilies/BBP_smilies/39.gif)
• Có sử dụng lớp sealed (một lớp được khai báo với từ khóa seal sẽ không cho phép tạo lớp con kế thừa nó). Điều này đôi khi không cần thiết theo như cách làm tác giả nói ở trên nhưng nó có thể giúp trình dịch
[JIT (Just – In – Time)](http://en.wikipedia.org/wiki/Just-in-time_compilation)tối ưu hóa chương trình.
• Có thể sử dụng một biến static để giữ instance duy nhất của lớp.
• Có thể sử dụng một biến public static để giúp các lớp khác sử dụng biến instance Singleton duy nhất được nói ở cách 3.
- Xin nhắc lại một lần nữa là trong tất cả các cách làm trên đều có sử dụng một public static property tên là Instance (
![ http://img145.imageshack.us/img145/5899/commentdz0.gif](http://img145.imageshack.us/img145/5899/commentdz0.gif)
First version – not thread-safe.
public sealed class Singleton
{
static Singleton instance=null;
Singleton()
{
}
public static Singleton Instance
{
get
{
if (instance==null)
{
instance = new Singleton();
}
return instance;
}
}
}
- Như đã giới thiệu trước đây, cách làm trên là không đạt được nguyên tắc thread-safe. Hai thread khác nhau có thể cùng một lúc chạy đến đoạn code trên, kiểm tra xem biến instance có bằng null hay không và thấy là nó null thật nên cùng tạo ra instance trong mỗi thread, như vậy là không đúng với ý tưởng thiết kế của Singleton. Chúng ta cũng dễ dàng thấy rằng biến instance trong đoạn code trên cũng có thể được khởi tạo trước khi biểu thức kiểm tra null được tính, nhưng vì các thread khác nhau đều có thể đọc bộ nhớ cùng một lúc, nếu không có một cơ chế kiểm soát để các thread khi truy xuất vùng nhớ tuần tự thì sẽ có trường hợp 2 hoặc nhiều thread đều kiểm tra và thấy biến instance đang là null và tạo ra hàng loạt các instance mới. Thiên hạ đại loạn.
![23 :bbpnodo:](http://igame.vn/f/images/smilies/BBP_smilies/23.gif)
Second version – simple thread safety
public sealed class Singleton
{
static Singleton instance=null;
static readonly object padlock = new object();
Singleton()
{
}
public static Singleton Instance
{
get
{
lock (padlock)
{
if (instance==null)
{
instance = new Singleton();
}
return instance;
}
}
}
}
- Cách làm thứ hai này là hoàn toàn thread-safe. Nếu bạn đã đọc phần giới thiệu ở trên của tôi về lock , bạn sẽ thấy trong đoạn code có sử dụng một shared object để lock phần code kiểm tra null của biến instance. Cách làm này sẽ giải quyết được sự xung đột có thể có giữa các thread mà chúng ta đã đề cập ở cách một. Với kĩ thuật này chúng ta sẽ chắc chắn chỉ có duy nhất một thread được phép tạo ra instance, duy nhất một thread được xử lý đoạn code trong phần lock ở một thời điểm, sau đó các thread khác mới được nhảy vào và thấy rằng đã tồn tại một instance khác null được khởi tạo trong thread đầu tiên. Tuy nhiên, cách làm này lại không có lợi về performance cho lắm vì mỗi lần biến Instance được sử dụng thì hàm lock sẽ được gọi và sẽ làm chương trình chạy chậm đi một ít.
- Điểm thứ hai cần lưu ý là ta có thể sử dụng bất kì object nào để dùng cho kĩ thuật lock, có thể sử dụng ngay biến Singleton mà một số lập trình viên vẫn sử dụng. Tuy nhiên tác giả sử dụng một 1 biến private static khác để dùng gọi trong lock. Locking trên những đối tượng mà các lớp khác trong chương trình có thể thấy và sử dụng được là điều vô cùng nguy hiểm, thậm chí có thể gây ra hiện tượng dead-lock. Sử dụng một shared object là cách tôi thích dùng bất khi nào có thể và tạo ra những đối tượng chỉ để dùng nó cho locking. Thường thì những đối tượng này nên được khai báo private trong lớp mà nó được sử dụng để tránh vấn đề nói trên. Cách làm đơn giản này giúp chúng ta có thể viết những chương trình thread-safe dễ dàng hơn nhiều.
Third version – attempted thread-safety using double-check locking
public sealed class Singleton
{
static Singleton instance=null;
static readonly object padlock = new object();
Singleton()
{
}
public static Singleton Instance
{
get
{
if (instance==null)
{
lock (padlock)
{
if (instance==null)
{
instance = new Singleton();
}
}
}
return instance;
}
}
}
- Phương pháp trên sẽ bảo đảm tính thread-safe của chương trình mà không cần phải gọi hàm lock mỗi lần sử dụng biến Instance. Nhưng thật không may, làm như vậy sẽ dẫn đến 4 trở ngại sau:
• Không áp dụng được cho Java. Điều này dường như hơi thừa khi bàn tới vì chúng ta đang đề cập đến Singleton cho .NET, tuy nhiên biết đâu sau này chúng ta cần áp dụng cho Java, lập trình viên C# cũng có thể trở thành lập trình viên Java cơ mà
![50 :bbpraroi:](http://igame.vn/f/images/smilies/BBP_smilies/50.gif)
• Cách làm này tuy an toàn (trên lý thuyết) với .NET framework 2.0 nhưng tôi vẫn không thích những gì trên lý thuyết, đặc biệt khi có sự nghi ngờ về tính an toàn của hệ thống.
• Ngoài ra cách này rất dễ sai, cách thiết kế trên buộc bạn phải theo chính xác từng bước như code mẫu.
• Và cuối cùng cách này vẫn chưa phải là cách hiệu quả nhất.
Fourth version – not quite as lazy, but thread-safe without using locks
public sealed class Singleton
{
static readonly Singleton instance=new Singleton();
// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static Singleton()
{
}
public static Singleton Instance
{
get
{
return instance;
}
}
}
- Các bạn có thể dễ dàng thấy rằng cách làm trên đơn giản hơn 3 cách trước rất nhiều, nhưng liệu cách này có bảo đảm tính thread-safe và lazy-load như mong muốn? Tất nhiên, hàm khởi tạo static của 1 lớp C# được thiết kế để chạy khi bất kì instance nào của lớp được tạo hoặc là có một hàm static nào đó của lớp được gọi. Ngoài ra hàm khởi tạo static chỉ được gọi một lần duy nhất trong mỗi
[AppDomain](http://www.odetocode.com/Articles/305.aspx). Tính chất này của C# sẽ giúp chúng ta kiểm tra xem một type có được khởi tạo chưa và nó sẽ tự động gọi hàm khởi tạo static bất cứ khi nào cần thiết, như vậy sẽ nhanh hơn là dùng những bước kiểm tra như những phương pháp đầu. Tuy nhiên, cách này vẫn vướng phải một số khiếm khuyết sau đây:
• Cách làm này không bảo đảm tính lazy-load. Trong trường hợp đặc biệt, nếu bạn dùng một static member thay vì dùng biến public static property Instance, lần gọi đầu tiên đến những static member này sẽ gọi hàm khởi tạo static và tạo ra instance của lớp. Nhược điểm này sẽ được khắc phục ở cách kế tiếp.
• Các hàm khởi tạo static nếu có gọi lẫn nhau sẽ bị lặp trong một vòng lặp vô tận.
![ http://img145.imageshack.us/img145/5899/commentdz0.gif](http://img145.imageshack.us/img145/5899/commentdz0.gif)
• Tính lazy-load trong quá trình khởi tạo đối tượng chỉ được bảo đảm trong môi trường .NET khi lớp không bị xem là “
[beforefieldinit](http://www.yoda.arachsys.com/csharp/beforefieldinit.html)”. Thật không may khi trong bộ biên dịch của C#, nó sẽ xem mọi lớp không có static constructor là beforefieldinit. Tác giả có một bài viết về điều này ở đây dành cho ai muốn tìm hiểu về chủ đề này.
- Một điểm cần lưu ý nữa với cách làm này (chỉ có cách này) là khai báo biến Instance là public static readonly. Như vậy code của chúng ta sẽ đơn giản và gọn hơn. Tuy nhiên, rất nhiều người vẫn thích sử dụng cách Property vì có thể chúng ta sẽ cần tới Property trong một số trường hợp.
Fifth version – fully lazy instantiation
public sealed class Singleton
{
Singleton()
{
}
public static Singleton Instance
{
get
{
return Nested.instance;
}
}
class Nested
{
// Explicit static constructor to tell C# compiler
// not to mark type as beforefieldinit
static Nested()
{
}
internal static readonly Singleton instance = new Singleton();
}
}
- Trong cách này, quá trình khởi tạo đối tượng được gọi ở lần truy xuất đầu tiên đến static member của lớp con, quá trình này chỉ xảy ra trong biến Instance. Như vậy cách làm này là hoàn toàn có tính lazy-load và đồng thời vẫn đảm bảo performance tốt như ở cách 4. Bạn cũng nên chú ý rằng mặc dù lớp con (lớp Nested) sẽ không thể được truy xuất từ bên ngoài lớp Singleton của chúng ta. Kĩ thuật này sẽ không gây bất kì vấn đề gì ngoài việc đoạn code của chúng ta sẽ phức tạp hơn một chút để bảo đảm tính lazy-load.
![ http://img145.imageshack.us/img145/5899/commentdz0.gif](http://img145.imageshack.us/img145/5899/commentdz0.gif)
Performance vs laziness
- Trong nhiều trường hợp, bạn không thật sự cần đến lazy-load trừ khi quá trình khởi tạo của lớp có làm nhiều việc gì đó mất nhiều thời gian. Nếu không đòi hỏi những yêu cầu phức tạp, chúng ta thấy rằng cách sử dụng hàm khởi tạo static sẽ làm ứng dụng chạy nhanh hơn. Nó sẽ tăng performance cho ứng dụng vì cách làm đó cho phép trình biên dịch JIT chỉ kiểm tra một lần duy nhất để xem instance của lớp có được tạo ra hay chưa. Nếu instance Singleton của bạn được truy xuất bên trong một vòng lặp lớn, bạn có thể sẽ thấy chậm hơn đôi chút,
![ http://img145.imageshack.us/img145/5899/commentdz0.gif](http://img145.imageshack.us/img145/5899/commentdz0.gif)
Exception
- Thỉnh thoảng, một số xử lý của bạn trong hàm khởi tạo của Singleton có thể tung ra exception, và có thể làm ảnh hưởng đến toàn bộ chương trình. Rất có thể trong trường hợp gặp exception khi khởi tạo, ứng dụng của bạn sẽ thử khởi tạo đối tượng một lần nữa trong phần catch exception. Và một trong những cách có thể làm điều đó là nhờ vào kĩ thuật gọi là “
[type initializers](http://www.west-wind.com/weblog/posts/187116.aspx)”, tuy nhiên nó vẫn có thể gây nhiều vấn đề khác. Những lần chạy chương trình khác nhau có thể sẽ xử lý vấn đề này theo các cách khác nhau, tuy nhiên tôi vẫn không biết lần nào chạy đúng như yêu cầu. Và cho dù được như vậy, code của bạn vẫn có thể bị lỗi ở lần chạy khác. Để tránh chuyện này, tôi đề nghị chúng ta sử dụng cách thứ hai.
A word on performance
- Nhiều người cho rằng sử dụng locking tốn rất nhiều resource và làm cho ứng dụng chạy chậm đi. Tác giả đã thực hiện một chương trình để test thử bằng cách truy xuất biến instance của Singleton trong vòng lặp 1 tỉ lần. Tuy không khoa học lắm nhưng trong thực tế bạn có thể muốn kiểm tra xem nó nhanh chậm thế nào. Kết quả cho thấy thực sự không quan trọng. Và kết quả test với phương pháp chậm nhất (cách 2) là mất 40s để hoàn thành xong vòng lặp 1 tỉ lần. Điều này có nghĩa là bạn có thể truy xuất 25 triệu lần biến instance trong một giây, cho nên những cố gắng nâng cao hiệu xuất ứng dụng bằng cách tối ưu hóa mẫu Singleton là không đáng kể trong một số trường hợp.
-
![ http://img145.imageshack.us/img145/5899/commentdz0.gif](http://img145.imageshack.us/img145/5899/commentdz0.gif)
![ http://img145.imageshack.us/img145/5899/commentdz0.gif](http://img145.imageshack.us/img145/5899/commentdz0.gif)
- Trong gần 3 năm làm lập trình, tôi rất thích sử dụng Singleton cho những lớp chỉ mang tính chất Utility, những lớp mà nhiều nơi có thể gọi nó. Một số lần tôi sử dụng Singleton cho một số form trong các ứng dụng desktop. Trong windows, nếu để ý các bạn sẽ thấy có một số cứa sổ chỉ hiện một lần cho dù bạn click vào shotcut của nó như thế nào. Điển hình là cửa sổ Find của notepad hay cửa sổ Run của Windowz. Form cũng là một lớp trong nhiều ngôn ngữ lập trình nên áp dụng Singleton cho nó là điều hoàn toàn bình thường, nếu bạn muốn một form chỉ xuất hiện một lần cho dù bạn gọi nó bằng cách click cả chục cái thì đấy là lúc bạn có thể áp dụng Singleton.
![ Run utility in Windows](http://img90.imageshack.us/img90/401/runnk8.png)
![ Find function in notepad](http://img389.imageshack.us/img389/9971/findao8.png)
- Nấu nướng từ bài viết
[Implementing the Singleton Pattern in C#](http://www.yoda.arachsys.com/csharp/singleton.html)
- Các link tham khảo khác:
##
Posted On Friday, May 23, 2008 at
at
[Dependency Injection with Spring.Net p6](http://www.developer.com/net/csharp/article.php/10918_3722931_6)
[10:32 PM](http://nthoai.blogspot.com/2008/05/dependency-injection-with-springnet-p6.html)by Van Nguyen [](https://www.blogger.com/post-edit.g?blogID=3978293580246860892&postID=7286051149121763294&from=pencil)
(
**Bài viết dịch từ bài ** **Dependency Injection with Spring.Net** ** của ** [David Consdorf](http://www.developer.com/feedback.php/http:/www.developer.com/net/csharp/article.php/10918_3722931_1), thêm hành thêm tiêu rồi nấu lại bởi Nguyễn Thoại
)
- Testing with Dependency Injection
- Một điểm thú vị nữa của Spring.NET là chúng ta có thể sử dụng
[Unit Test](http://www.nunit.org/)để test các component của chúng ta rất dễ dàng. Với khả năng thay đổi mối liên kết giữa các thành phần trong ứng dụng, người lập trình có thể tạo ra những “đối tượng giả” để test, vì vậy ta có thể test đoạn code họ đang viết mà không cần lo lắng đến những phần chưa hoàn thành của hệ thống. Điều này có thể lạ với một số bạn vì khái niệm [unit testing](http://en.wikipedia.org/wiki/Unit_test)không được dạy ở các trường đại học, đến khi đi làm ở một số công ty các bạn sẽ thường xuyên gặp khái niệm này. Ý tưởng cơ bản là những hàm, những đoạn code các bạn viết ra đều phải có một phần code khác để test ngay những hàm bạn tạo. Giả sử bạn viết một lớp tính điểm trung bình các môn Toán, Lý, Hóa của học sinh, trong lớp (class) của bạn sẽ gọi đến một lớp Utility tính trung bình của một người khác trong nhóm viết. Vấn đề bạn gặp phải là lớp Utility đó chưa được viết xong, như vậy không thể nào test được. Nhưng rất may là đã có Spring.NET sẽ giúp chúng ta gỡ rối vấn đề này.
- Một ví dụ khác, khi bạn đang viết một số lớp dịch vụ (service – BLL) cho ứng dụng nhưng tầng dữ liệu (DAL) vẫn chưa hoàn thành; hoặc có khi bạn đang viết phần mềm cho một khách hàng nước ngoài rất khó tính và họ không cho bạn truy cập vào server database của họ; với Spring.NET và Dependency Injection, bạn vẫn có thể test thử các lớp dịch vụ bằng cách tạo ra các
[Mock](http://www.nmock.org/)objects để điền dữ liệu chưa lấy được từ database mà không cần đến những đối tượng ở tầng dữ liệu, hay nói cách khác bạn cũng không cần đến database để test. Mock là một kĩ thuật lí thú để test ứng dụng rất linh động và tôi hi vọng có dịp sẽ chia sẽ những hiểu biết của mình với các bạn ở những bài viết sau. Trong phạm vi bài viết này tôi chỉ có thể giới thiệu Mock như là một framework giúp chúng ta tạo ra những object giả với những hàm hoạt động theo cách mà ta muốn. Trong trường hợp này nó sẽ tạo ra những object giả ở tầng dữ liệu và giả vờ như đã kết nối với database và trả về dữ liệu cho những lớp ở tầng dịch vụ. Sau này, khi chúng ta cần kết nối tầng dịch vụ với tầng dữ liệu, bạn chỉ cần thay đổi file cấu hình của Spring.
- Ngoài những điều kể trên, có một số kĩ thuật khác rất lí thú mà Spring.NET hỗ trợ bao gồm cả hệ thống test của chính Spring.NET. Vì vậy nếu bạn muốn tìm hiểu hãy đọc những bài viết khác liên quan đến vấn đề này ở trang web www.springframework.net
- More Spring.NET
- Conclusion
[Spring.NET](http://www.blogger.com/www.springframework.net)để biết thêm những tính năng tuyệt vời khác.
- Code Examples
[Download Code Examples](http://www.developer.com/img/2008/01/SpringDIExample.zip).
- About the Author
**David Consdorf,**Chicago, Illinois
- Work Experience
- Education
- About the Translator
: Click
[here](#footer)
(Các bạn đang xem phần 6)
##
Posted On at
at
[Dependency Injection with Spring.Net p5](http://www.developer.com/net/csharp/article.php/10918_3722931_5)
[4:12 PM](http://nthoai.blogspot.com/2008/05/dependency-injection-with-springnet-p5.html)by Van Nguyen [](https://www.blogger.com/post-edit.g?blogID=3978293580246860892&postID=8020366732706076870&from=pencil)
(
**Bài viết dịch từ bài ** **Dependency Injection with Spring.Net** ** của ** [David Consdorf](http://www.developer.com/feedback.php/http:/www.developer.com/net/csharp/article.php/10918_3722931_1), thêm hành thêm tiêu rồi nấu lại bởi Nguyễn Thoại
)
- Như ở giới thiệu
[phần trước](http://nthoai.blogspot.com/2008/05/dependency-injection-with-springnet-p4.html), trong phần này chúng ta sẽ xem một ví dụ khác về cách áp dụng phổ biến của dependency injection khi chương trình được tách thành nhiều tầng và các tầng này được kết nối với nhau bằng Spring.NET
Quick N-Tier Example
- Bất cứ ai từng làm việc với những ứng dụng khá lớn có thể đã biết đến kiến trúc N-tier. Ý tưởng cơ bản là ứng dụng được chia thành nhiều tầng chức năng. Mỗi tầng đảm nhiệm một chức năng nào đó và chỉ liên lạc với những tầng ở phía trên hoặc dưới nó. Ví dụ dễ gặp nhất là kiến trúc 3 tầng (lúc đi học được dạy là mô hình 3 lớp) như sau:
Hình 12: Mô hình 3 lớp
- Trong ví dụ này, tầng trên cùng là tầng giao diện (presentation/view) làm nhiệm vụ hiển thị dữ liệu trên trang web, trên một ứng dụng client, một ứng dụng di động, … Kế tiếp, ta có một tầng dịch vụ (Business Logic Layer – BLL hay Service layer) làm nhiệm vụ xử lý tính toán những logic của ứng dụng. Và cuối cùng là tầng tầng dữ liệu (DAL - Data Access Layer) chịu trách nhiệm giao tiếp với cơ sở dữ liệu (database), XML hoặc bất kì loại datasource nào mà chương trình có thể sử dụng. Mỗi tầng chỉ giao tiếp duy nhất với tầng khác thông qua một interface, mỗi tầng sẽ không biết các tầng khác hoạt động như thế nào và được lập trình như thế nào.
- Ví dụ tầng giao diện sẽ gọi tầng dịch vụ để tạo ra một business object để giữ những gì người dùng nhập vô, sau đó tầng dịch vụ sẽ tạo ra một đối tượng dựa trên những gì nhập vào, tính toán gì đó nếu cần thiết và tiếp tục gọi tầng dữ liệu để lưu trữ những thông tin này. Tầng dịch vụ không cần quan tâm tầng giao diện đang hiển thị dữ liệu trên trang web hay trên một windows application, nói cách khác nó không quan tâm ứng dụng thuộc loại nào, và nó cũng chẳng cần quan tâm làm thế nào tầng tầng dữ liệu lưu thông tin xuống dưới, nó cũng không quan tâm ứng dụng đang sử dụng loại cơ sở dữ liệu nào. Những cách làm này giúp chúng ta dễ dàng thay đổi chương trình để thích hợp cho nhiều loại người dùng khác nhau, trên desktop, trên web hoặc trên thiết bị di động đều được. Thêm vào đó khi có cần thay đổi loại cơ sở dữ liệu, chúng ta chỉ cần viết lại hoặc thay thế (nếu có sẵn) tầng dữ liệu. Nếu có một tầng nào đó cần thay đổi thì chỉ có tầng đó phải sửa đổi và những tầng khác có thể được sử dụng lại
- Spring.Net và Dependency Injection giúp chúng ta xây dựng những ứng dụng nhiều tầng bằng cách chia ứng dụng ra thành nhiều component. Với Spring.Net, chúng ta có thể giữ cho những components trong 1 tầng độc lập với những tầng khác và có thể inject dependency vào những tầng khác dễ dàng nhờ vào file cấu hình xml.
Các bạn hãy tham khảo đoạn code ví dụ cách liên kết một đối tượng từ tầng dịch vụ với một đối tượng từ tầng tầng dữ liệu:
public interface IServiceExample {
void doOperationOnObject(Object obj);
Object getObject(int objectID);
void saveObject(Object obj);
}
public class ServiceExample : IServiceExample {
public IDAOExample _daoExample;
public ServiceExample(IDAOExample daoExample) {
_daoExample = daoExample;
}
public void doOperationOnObject(Object obj) {
// Enter business logic for operation here
}
public Object getObject(int objectID) {
// Use DAO to retrieve object from the database
return _daoExample.getObject(objectID);
}
public void saveObject(Object obj) {
// Use DAO to save object to the database
_daoExample.saveObject(obj);
}
}
public interface IDAOExample {
Object getObject(int objectID);
void saveObject(Object obj);
}
public class DAOExample : IDAOExample {
public DAOExample() {
}
public Object getObject(int objectID) {
// Put database code to retrieve object here
}
public void saveObject(Object obj) {
// Put database code to save object here
}
}
Hình 13: Services & DAO objects
<object name="ServiceExample" type="ServiceExample, __Code" singleton="true">
<constructor-arg name="daoExample" ref="DAOExample" />
</object>
<object name="DAOExample" type="DAOExample, __Code" singleton="true">
</object>
Hình 14: Services & DAO mappings
- Trong ví dụ trên, bạn có một đối tượng thuộc tầng dịch vụ giao tiếp với một đối tượng thuộc tầng dữ liệu để lưu thông tin của một object xuống database. Đối tượng DAO được nhúng vào bên trong đối tượng tầng dịch vụ nhờ Spring.NET. Bằng cách này, sẽ không có sự liên kết cụ thể nào trong code giữa các tầng (layers).
- Nếu một ngày đẹp trời nào đó khách hàng yêu cầu bạn đổi từ MySQL sang sử dụng Oracle, tất cả những gì bạn cần làm là tạo mới những lớp DAO cho Oracle, sau đó sửa file config của Spring.NET sang Oracle DAO object. Không có dòng nào trong code của tầng dịch vụ (BLL) cần phải thay đổi hay build lại.
- Bạn cũng nên chú ý là trong trường hợp này, tầng giao diện (Presentation) khi sử dụng những đối tượng dịch vụ cũng có thể nhờ Spring.NET để lấy; cũng tương tự như những đối tượng ở tầng dịch vụ sử dụng Spring.NET để gọi các đối tượng ở tầng dữ liệu. Một điều cần chú ý nữa là các đối tượng ở tầng dịch vụ và tầng dữ liệu đều là
[singletons](http://nthoai.blogspot.com/search/label/Singleton) bởi vì chúng được sử dụng để tính toán và lưu trữ trong chương trình, chúng chẳng cần giữ lại dữ liệu gì cả. Hiện nay, có rất nhiều framework .NET hỗ trợ các bạn sẵn tầng DAL với các chức năng có sẵn như
lazy load, caching, optimized queries,… Các bạn chỉ cần viết một số store procedure hoặc config một chút xíu là có thể sử dụng được mà không cần viết code nhiều. Các framework đó cũng rất linh hoạt khi cần phải chuyển đổi loại database. Hiện có mốt số framework rất nổi tiếng như
[Ibatis](http://ibatis.apache.org/), [NHibernate](http://www.hibernate.org/343.html), [Active Record](http://www.castleproject.org/activerecord/index.html), [LinQ](http://msdn.microsoft.com/en-us/netframework/aa904594.aspx),… tùy vào nhu cầu và thói quen bạn có thể lựa chọn framework thích hợp nhất cho mình. Nếu người là người cổ điển có thể NHibernate thích hợp với bạn, còn nếu là dân sành điệu thích thời trang thì LinQ là lựa chọn tốt
.Các bạn có thể tìm hiểu thêm thông tin về các
[Object-relational mapping](http://madgeek.com/Articles/ORMapping/EN/mapping.htm) (O/R Mapping) framework từ [đây](http://madgeek.com/Articles/ORMapping/EN/mapping.htm), theo tôi đó là một trong những bài viết rõ ràng súc tích và dễ hiểu nhất.
##
Posted On Thursday, May 22, 2008 at
at
[Dependency Injection with Spring.Net p4](http://www.developer.com/net/csharp/article.php/10918_3722931_4)
[4:47 PM](http://nthoai.blogspot.com/2008/05/dependency-injection-with-springnet-p4.html)by Van Nguyen [](https://www.blogger.com/post-edit.g?blogID=3978293580246860892&postID=8550948114366280529&from=pencil)
(
**Bài viết dịch từ bài ** **Dependency Injection with Spring.Net** ** của ** [David Consdorf](http://www.developer.com/feedback.php/http:/www.developer.com/net/csharp/article.php/10918_3722931_1), thêm hành thêm tiêu rồi nấu lại bởi Nguyễn Thoại
)
- Trong
[phần 3](http://nthoai.blogspot.com/2008/05/dependency-injection-with-springnet-p3.html), tôi đã sử dụng một ví dụ khác với các ví dụ truyền thống để giải thích mẫu thiết kế Strategy Pattern. Nếu bạn muốn tìm hiểu thêm những ví dụ khác, các bạn có thể tham khảo bài viết của tác giả Dadiv Consdorf ở [đây](http://www.developer.com/net/csharp/article.php/10918_3722931_3) hoặc trên [wiki](http://en.wikipedia.org/wiki/Strategy_pattern). Như đã nói ở bài viết trước, mẫu thiết kế Strategy Pattern sẽ giúp bạn trừu tượng hóa (abstract) những xử lý (behavior) tương tự nhau của đổi tượng(object) bằng cách đưa những xử lý đó ra những lớp độc lập, và những lớp này sẽ cùng implement một interface.
- Ở những ví dụ truyền thống, các bài viết thường sử dụng bài toán về các thuật toán sắp xếp để minh hoạ mẫu thiết kế Strategy. Trong đó, một lớp NumberArray sẽ có khả năng sắp xếp danh sách các số bằng nhiều thuật toán khác nhau. Các thuật toán này sẽ được đóng gói trong các lớp Sort và chính những lớp BubbleSort, HeapSort,… này lại implement cùng 1 interface ISortStrategy. Lớp NumberArray không sử dụng một thuật toán cụ thể nào để sắp xếp, nó sẽ giữ một object thuộc về kiểu ISortStrategy và các thuật toán sort sẽ được chuyển đổi dễ dàng trong lúc chương trình chạy và ngoài ra nếu sử dụng Spring.NET ta có thể thay đổi những lớp Strategy bằng file config.
- Quay lại ví dụ ở
[ bài trước](http://nthoai.blogspot.com/2008/05/dependency-injection-with-springnet-p3.html), các bạn sẽ thấy sự tương tự. Nếu xem lớp “ThuBayTuanToi” là chương trình chính thì các bạn sẽ thấy lớp NguyenThoai có thể chọn cách DiXemPhim hoặc DiAnToi một cách dễ dàng bằng cách khởi tạo với một đối tượng thuộc kiểu tương ứng. Tuy nhiên, việc này sẽ làm mất đi tính loose coupling của chương trình vì lớp “NguyenThoai” phải reference đến những lớp DiXemPhim, DiAnToi. Nói cách khác nó phải biết DiXemPhim là như thế nào, DiAnToi là như thế nào. Spring.NET sẽ giúp tôi giải quyết vấn đề đó, Spring.NET sẽ giữ tất cả những chiến thuật đi chơi của tôi, và NguyenThoai với Spring.NET chỉ cần thoả thuận với nhau các kí hiệu : “ĐiĂn”, “XemPhim”, “Cafe”,... Bản thỏa thuận như sau:
<object name="DiAnToi" type="DiAnToi, __Code" singleton="true">
</object>
<object name="DiXemPhim" type="DiXemPhim, __Code" singleton="true">
</object>
<object name="DiUongCafe" type="DiUongCafe, __Code" singleton="true">
</object>
<object name="XemPhim" type="NguyenThoai, __Code" singleton="false">
<constructor-arg name="cachDiChoi" ref="DiXemPhim" />
</object>
<object name="DiAnToi" type="NguyenThoai, __Code" singleton="false">
<constructor-arg name="cachDiChoi" ref="DiAnToi" />
</object>
<object name="Cafe" type="NguyenThoai, __Code" singleton="false">
<constructor-arg name="cachDiChoi" ref="DiUongCafe" />
</object>
Hình 8: Mapping các objects trong file config.
- Như vậy ít nhất tôi với Spring.NET đã thoả thuận với nhau 3 mật hiệu, nếu cần đi chơi theo cách nào thì thôi chỉ nói cho Spring.NET biết mật hiệu và Spring sẽ lấy ra những thứ tôi cần. Cách làm như trên giúp chúng ta thay đổi các chiến thuật cần sử dụng trong lúc runtime. Còn việc map đối tượng chính với các lớp cài đặt các behavior đã được định nghĩa trong file config như hình 8. Trong phần 5 của loạt bài này, chúng ta sẽ nói thêm một ví dụ nữa về ứng dụng Spring.NET để map các đối tượng với nhau. Còn bây giờ, chúng ta hãy xem tôi sẽ sử dụng Spring như thế nào trong lần đi chơi thứ bảy tuần tới
:
public class ThuBayTuanToi {
public void main() {
IApplicationContext ctx = ContextRegistry.GetContext()
NguyenThoai _thoai = (NguyenThoai)ctx.GetObject("XemPhim");
_thoai.Money = 100.000 VND;
_thoai.Vehicle = new Vehicle("Xe Bus");
_thoai.DanBanGaiDiChoi();
}
}
Hình 9: Sử dụng Spring.NET để lấy đối tượng được map.
- Một điều quan trọng nữa nên nói đến là việc sử dụng mẫu thiết kế Singleton bên trong Spring.NET. Bạn có thấy rằng ở những ví dụ trước đều có một property là singleton ở phần object mapping trong các file config. Theo tôi, Singleton là mẫu thiết kế đơn giản nhất, thông dụng nhất và thường được sử dụng nhất. Để hiểu rõ hơn về thiết kế này, các bạn hãy xem sơ đồ lớp bên dưới:
Hình 10: Sơ đồ lớp của mẫu Singleton.
- Theo hình thì chúng ta thấy lớp singleton có một hàm GetInstance() để trả về instance của object Singleton. Tuy nhiên tôi thích cách sử dụng Public Property hơn
:
public class Singleton {
private static Singleton _instance = null;
protected Singleton() {
}
public static Singleton Instance
{
get
{
if ( _instance == null )
_instance = new Singleton();
return _instance;
}
}
}
Hình 11: Ví dụ mẫu Singleton.
- Mẫu thiết kế singleton giúp chúng ta bảo đảm rằng lúc nào cũng tồn tại nhiều nhất 1 instance của một lớp tương ứng. Như các bạn thấy trong sơ đồ lớp, chúng ta sẽ làm được chuyện đó bằng cách thiết kế một lớp với 1 protected constructor (hàm khởi tạo), và vì là protected nên nó chỉ có thể tạo ra instance bên trong. Chúng ta nên sử dung protected ở đây mà không dung private vì khi khai báo là protected chúng ta có thể sử dụng unit test để test và những lớp con có thể kế thừa constructor này. Với cách làm như vậy, không một chỗ nào trong chương trình có thể tạo ra instance của lớp. Do đó, sẽ chỉ có 1 instance duy nhất của đối tượng được tạo ra và đối tượng đó sẽ tồn tại trong xuốt quá trình chạy của chương trình.
- Lớp singleton sẽ phải cung cấp một public static Property hoặc một hàm static với kiểu trả về là chính lớp đó để các đối tượng khác có thể truy xuất được object mà nó đóng gói bên trong. Mấu thiết kế này có vẻ như rất giống với cách chúng ta sử dụng những hàm static, nhưng nó khác biệt ở chỗ singleton cho chúng ta sự linh động hơn trong lập trình vì chúng ta vẫn có một instance thực sự của một đối tượng để làm việc. Ngoài ra có một số điểm khác biệt khác mà tôi sẽ đề cập đến trong bài viết khác. Việc áp dụng mẫu singleton đúng chỗ đúng lúc trong ứng dụng rất có lợi, chương trình của bạn sẽ chạy nhanh hơn vì không cần phải liên tục tạo ra những đối tượng mới và cũng không cần huỷ những đối tượng sau khi đã sử dụng xong. Ngoài ra cũng sẽ tiết kiệm được bộ nhớ của máy tính vì không cần phải lưu trữ nhiều đối tượng trong hệ thống. Ngày nay, lợi ích thứ hai này không thể hiện rõ vì bộ nhớ máy tính của chúng ta không ngừng được tăng lên với giá ngày càng rẻ, nhưng theo tôi tối ưu hoá ứng dụng khi có thể là không bao giờ thừa nhất là khi chúng ta áp dụng design pattern
- Spring.NET đã sử dụng nguyên tắc này của mẫu singleton bằng cách cho phép người dùng quyết định xem 1 lớp có duy nhất một instance hay không. Vì vậy, trong ví dụ trên, lớp NguyenThoai không cần phải là singleton, bởi vì sao? Bởi vì thường thì tình hình tài chính và tâm trạng tôi hoàn toàn khác nhau ở mỗi ngày thứ 7. Tôi sẽ có nhiều lần đi chơi khác nhau và với mỗi lần ấy có thể tôi sẽ có số tiền khác nhau. Ngoài ra tôi là một người rất chung thuỷ, tôi thích đến những chỗ cũ, ăn ở những quán ăn cũ nên theo tôi những lớp DiAnToi, DiXemPhim, … nên là những lớp singleton. Ngoài nhiệm vụ thực hiện quá trình đi chơi và biến IsHappy của tôi thành true thì nó chẳng nên có vai trò gì khác. Tương tự,
[ở ví dụ của tác giả](http://www.developer.com/net/csharp/article.php/10918_3722931_3) với những thuật toán sort, những lớp BubleSort, HeapSort, QuickSort,... cũng nên là singleton vì ngoài chuyện sắp xếp một mảng các số, nó chẳng cần giữ giá trị sau khi sắp xếp của mảng làm gì. Do đó mình chỉ cần khởi tạo một lần và sử dụng suốt cho những lần sau.
- Hi vọng kết thúc phần 4 này, các bạn có thể hiểu được đôi chút về Spring.NET, hiểu được Spring có thể giúp các bạn làm gì và vì sao nên làm như vậy. Nói chung khi thiết kế lớp cho chương trình, nếu bạn gặp phải tình huống một lớp A có giữ 1 instance của lớp B thì bạn đang đối mặt với tính loose coupling. Lúc đấy, bạn nên nghĩ xem sau này có khi nào cần phải làm một lớp B2 tương tự lớp B hay không. Nêú có, chính là lúc bạn cần nghĩ đến Dependency Injection và Spring là một trong những lựa chọn để giải quyết bài toán của bạn. Để giúp bạn hiểu rõ hơn về khả năng mapping objects của Spring, ở phần 5, tác giả sẽ nói đến một ví dụ khác lý thú hơn, thông dụng và thực tế hơn trong việc áp dụng Spring.NET để kết nối các đối tượng với nhau.
(Các bạn đang xem phần 4)

WARC-Type: response

Content-Type: application/http; msgtype=response

WARC-Identified-Payload-Type: application/xhtml+xml

Server: GSE

X-Content-Type-Options: nosniff

Cache-Control: private, max-age=0

X-XSS-Protection: 1; mode=block

Content-Type: text/html; charset=UTF-8


markdown:
p-popup
Giới thiệu
Góp ý
Liên hệ quảng cáo
RSS
Đăng ký
Đăng Nhập
Tin nóng
Nhận định
Lịch thi đấu
Kết quả
BXH
Kèo
World Cup 2018
Lịch phát sóng TV
TIP bóng đá
Dịch vụ
p-top-1
Trang chủ
GÓC CHUYÊN GIA
Tin tức GÓC CHUYÊN GIA
Nhận định Biến động tỷ lệ bóng đá hôm nay 11/12: Lazio vs Torino
10:54 11/12/2017
Dựa trên những biến động về tỷ lệ cũng như mức hoa hồng của 2 cửa, các...
Nhận định Biến động tỷ lệ bóng đá hôm nay 09/12:...
Nhận định Biến động tỷ lệ bóng đá hôm nay 08/12:...
p-chuyenmuc-left-1
Xem thêm
Hết
Đang tải dữ liệu...
p-chuyenmuc-right-1
p-chuyenmuc-right-2
Video bóng đá
Top bàn thắng đẹp Ngoại hạng Anh 2017/18
Liverpool 4-0 Brighton
Huddersfield 0-1 Arsenal
Southampton 0-1 Man City
Newcastle 3-0 Chelsea
p-chuyenmuc-right-3
Tin Đọc nhiều
1
Fan M.U 'khủng hoảng nặng nề' vì cú sốc Lukaku, Phil Jones
2
KẾT QUẢ MU - Chelsea: Tội đồ 'đốt' cả trận đấu
3
Muốn 'vô đối' ở Ngoại hạng Anh, Pep đòi Man City mua Hazard
4
KẾT QUẢ Bayern Munich - Frankfurt: tân HLV khiến Bayern gục ngã
5
Vì sao Phil Jones không bị đuổi sau tình huống phạm lỗi với Hazard?
6
XÁC NHẬN: Juventus có tân binh ngôi sao đầu tiên: đến từ Liverpool
p-chuyenmuc-right-4
p-chuyenmuc-right-5
Loading...
p-chuyenmuc-bottom-1
p-bottom-1
loading...
p-bottom-right
p-popup
p-sticky-left
p-sticky-right

WARC-Truncated: length

WARC-Identified-Payload-Type: text/html

X-Cache: MISS

Connection: close

Via: 1.1 varnish-v4

X-Frame-Options: SAMEORIGIN

Accept-Ranges: bytes

X-UA-Device: bot

Vary: Accept-Encoding, User-Agent

Content-Type: text/html


markdown:
# Hình Ảnh Thi Công Quảng Cáo & Trang Trí Event
**Hình Ảnh Thi Công Quảng Cáo & Trang Trí Event** ![ Hình Ảnh Thi Công Quảng Cáo & Trang Trí Event Xuân Giáp Ngọ](http://oscmedia.net/uploads/admin/images/hinh-anh-thi-cong-quang-cao-trang-tri-event-1.jpg)
![ Hình Ảnh Thi Công Quảng Cáo & Trang Trí Event Xuân Giáp Ngọ](http://oscmedia.net/uploads/admin/images/hinh-anh-thi-cong-quang-cao-trang-tri-event-2.jpg)
![ Hình Ảnh Thi Công Quảng Cáo & Trang Trí Event Xuân Giáp Ngọ](http://oscmedia.net/uploads/admin/images/hinh-anh-thi-cong-quang-cao-trang-tri-event-3.jpg)
![ Hình Ảnh Thi Công Quảng Cáo & Trang Trí Event Xuân Giáp Ngọ](http://oscmedia.net/uploads/admin/images/hinh-anh-thi-cong-quang-cao-trang-tri-event-4.jpg)
![ Hình Ảnh Thi Công Quảng Cáo & Trang Trí Event Xuân Giáp Ngọ](http://oscmedia.net/uploads/admin/images/hinh-anh-thi-cong-quang-cao-trang-tri-event-5.jpg)
![ Hình Ảnh Thi Công Quảng Cáo & Trang Trí Event Xuân Giáp Ngọ](http://oscmedia.net/uploads/admin/images/hinh-anh-thi-cong-quang-cao-trang-tri-event-6.jpg)
Từ ngày 27/02 đến ngày 01/3/2015 Ngày hội Du lịch tỉnh BR-VT lần thứ nhất năm 2015 được tổ chức tại Chợ Du lịch Vũng Tàu. OSC Media đã thực ...
Chiều 11/4, UBND thành phố Vũng Tàu đã khai mạc Liên hoan Ẩm thực các tỉnh ven biển Bà Rịa – Vũng Tàu năm 2012. Liên hoan sẽ diễn ra trong 3 ngày ...
OSC Media thực hiện Thiết kế, thi công quảng cáo trên mọi chất liệu, đặc biệt là thiết kế, thi công gian hàng triển lãm, hội chợ… trang trí ...
Ngày 22-25/8/2013, tại khu vực hoa viên Trưng Trắc-Trưng Nhị (Bãi Trước), UBND TP.Vũng Tàu đã tổ chức thành công Lễ hội ẩm thực phố biển chào ...
Diễn ra từ 28-31/8/2014 tại Hoa viên Trưng Trắc – Trưng Nhị (Phường 1, Vũng Tàu). Lễ Hội lần này OSC Media là đơn vị cung cấp dịch vụ phục vụ ...

Pragma: no-cache

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Vary: Accept-Encoding,User-Agent


markdown:
TOYOTA HILUX 3.0 AT 2016
Toyota Hilux 3.0 AT (4 x 4) hoàn toàn mới
S000008
Toyota Hilux 673.000.000 VND Quantity: 0 Chiếc
![ TOYOTA HILUX 3.0 AT 2016](http://otoxemoi.com/assets/san-pham/2016_06/img_7165-800x600-800x600.jpg)
Toyota Hilux 3.0 AT (4 x 4) hoàn toàn mới
Hãng sản xuất :
[Nhập khẩu từ Thái Lan](http://otoxemoi.com/index.php?language=vi&nv=san-pham&op=search_result&sid=2)
Bảo hành : Bảo hành 3 năm hoặc 100.000 km tùy theo điều kiện nào đến trước
-
## TOYOTA HILUX 3.0 AT 2016
- Post on 24-06-2016 04:24:21 AM - 1923 Views
-
Price: 673.000.000 VND
-
Toyota Hilux 3.0 AT (4 x 4) hoàn toàn mới
Hãng sản xuất :
[Nhập khẩu từ Thái Lan](http://otoxemoi.com/index.php?language=vi&nv=san-pham&op=search_result&sid=2)
Bảo hành : Bảo hành 3 năm hoặc 100.000 km tùy theo điều kiện nào đến trước
| |THÔNG SỐ KỸ THUẬT XE TOYOTA HILUX 3.0 AT
| |KÍCH TH ƯỚC – TRỌNG LƯỢNG
|Kích thước tổng thể||Dài x Rộng x Cao||mm||5330 x 1855 x 1815|
|Kích thước khoang chở hng||Dài x Rộng x Cao||mm||1550 x 1620 x 490|
|Chiều dài cơ sở||mm||3085|
|Chiều rộng cơ sở||Trước x sau||mm||1540 x 1550|
|Khoảng sng gầm xe||mm||286|
|Góc thoát||Trước x sau||Độ||31 x 26|
|Bán kính vòng quay tối thiểu||m||6.4|
|Trọng lượng không tải||Kg||2040 - 2060|
|Trọng lượng toàn tải||Kg||2890|
| |ĐỘNG CƠ & VẬN HÀNH
|Mã động cơ||2KD-FTV|
|Loại||Diesel, I4, 16 van, DOHC, Phun nhiên liệu trực tiếp sử dụng đường dẫn chung, tăng áp biến thiên|
|Dung tích công tác||cc||2982|
|Công suất tối đa (SAE-Net)||HP/rpm||161/3400|
|Mô men xoắn tối đa (SAE-Net)||N.m/rpm||360/1600-3000|
|Dung tích bình nhiên liệu||lít||80|
|Tiêu chẩn khí xả||Euro 2|
|Hộp số||Số tự động 5 cấp|
|Dẫn động||4 bánh bán thời gian, gài cầu điện|
|Hệ thống treo||Trước||Độc lập tay đòn kép|
|Sau||Nhíp lá|
|Vỏ và mâm xe||265/65R17, mâm đúc|
| |NGOẠI THẤT
|Cụm đèn trước||Đèn chiếu gần||LED, kiểu bóng chiếu|
|Đèn chiếu xa||Halogen, phản xạ đa chiều|
|Đèn chiếu sáng ban ngày||Có (LED)|
|Hệ thống điều chỉnh góc chiếu||Tự động|
|Đèn pha tự động||Có|
|Chế độ đèn chờ dẫn đường||Có|
|Đèn sương mù phía trước||Có|
|Kính chiếu hậu||Mạ crôm||Có|
|Điều chỉnh điện||Có|
|Gập điện||Có|
|Tích hợp đèn báo rẽ||Có|
|Đèn báo phanh trên cao||Có (LED)|
|Gạt mưa||Gián đoạn, điều chỉnh thời gian|
|Sưởi kính sau||Có|
|Ăng ten||Dạng cột|
| |NỘI THẤT
|Tay lái||Kiểu||3 chấu,bọc da|
|Nút điều chỉnh||Hệ thống âm thanh, Màn hình hiển thị đa thông tin, đàm thoại rảnh tay|
|Điều chỉnh||Chỉnh tay 4 hướng|
|Trợ lực||Thủy lực|
|Gương chiếu hậu bên trong||2 chế độ ngày đêm|
|Bảng đồng hồ trung tâm||Loại||Optitron|
|Màn hình hiển thị đa thông tin||Màn hình TFT 4.2 inch|
|Chất liệu ghế||Da|
|Số chỗ ngồi||5|
| |TIỆN ÍCH
|Hàng ghế trước||Ghế người lái||Chỉnh điện 8 hướng|
|Ghế hành khách||Chỉnh cơ 4 hướng|
|Hệ thống điều hòa||Tự động|
|Cửa gió cho hàng ghế sau||Có|
|Hệ thống âm thanh||CD 1 đĩa 6 loa, AM/FM, MP3/WMA, kết nối AUX/USB, bluetooth|
|Hê thống mở khóa thông minh và bằng nút bấm||Không|
|Hệ thống chống trộm||Có|
|Hệ thống mã hóa động cơ||Không|
|Khóa cửa từ xa||Có|
|Khóa cửa sổ điều chỉnh điện||Có, 1 chạm tất cả các cửa, chống kẹt|
| |AN TOÀN CHỦ ĐỘNG
|Hệ thống phanh||Trước||Đĩa thông gió|
|Sau||Tang trống|
|Hệ thống chống bó cứng phanh (ABS)||Có|
|Hệ thống hỗ trợ lực phanh khẩn cấp (BA)||Có|
|Hệ thống phân phối lực phanh điện tử (EBD)||Có|
|Hệ thống ổn định thân xe điện tử (tích hợp khả năng điều khiển ổn định khi kép moóc)||Có|
|Hệ thống kiểm soát lực kéo chủ động (A-TRC)||Có|
|Hệ thống hỗ trợ khởi hành ngang dốc (HAC)||Có|
|Đèn báo p hanh khẩn cấp||Có|
| |AN TOÀN THỤ ĐỘNG
|Túi khí ngườ ilái và hành khách phía trước||Có|
|Túi khí đầu gối người lái||Có|
|Túi khí bên phía trước||Có|
|Túi khí rèm||Có|
|Móc ghế an toàn cho trẻ em ISOFIX||Có|
|Cột lái tự đổ||Có|
|Ghế có cấu trúc giảm chấn thương cổ||Có|
Products in this Category
[TOYOTA HILUX 3.0G 4X4 MT 2016](/en/san-pham/Toyota-Hilux/toyota-hilux-3-0g-4x4-mt-2016.html)
775.000.000 VND
Views:
[XE TOYOTA HILUX 2.5E MT 2016](/en/san-pham/Toyota-Hilux/xe-toyota-hilux-2-5e-mt-2016.html)
631.000.000 VND
Views:

Vary: Accept-Encoding

Set-Cookie: nv4c_q0fzS_statistic_en=l5ZjnJ2UbWRukw%2C%2C; expires=Sun, 20-May-2018 10:14:20 GMT; Max-Age=1800; path=/; domain=.otoxemoi.com; httponly

Content-Language: en

Content-Type: text/html; charset=utf-8


markdown:
-
[Trung Quốc cấm xuất khẩu dầu diesel](http://petrotimes.vn/trung-quoc-cam-xuat-khau-dau-diesel-45711.html)Lệnh cấm sẽ tác động tới 2 nước nhập khẩu chính là Việt Nam và Singapore.
-
[Giá dầu kết thúc tuần giao dịch với sắc xanh trải rộng](http://petrotimes.vn/gia-dau-ket-thuc-tuan-giao-dich-voi-sac-xanh-trai-rong-45709.html)Dầu thô kỳ hạn Mỹ đi lên trong phiên giao dịch cuối tuần nhờ làn sóng mua lại các hợp đồng dầu đã bán trước đó sau khi giảm vì đồng đô la mạnh và ...
-
[Tìm hiểu ‘con cú vọ’ Sentinel R1 ‘soi mói’ Libya](http://petrotimes.vn/tim-hieu-_8216con-cu-vo_8217-sentinel-r1-_8216soi-moi_8217-libya-44393.html)Khi Mỹ ít can dự vào cuộc không kích Libya, các máy bay trinh sát của Anh được dịp thể hiện vai trò của mình.Khi Mỹ ít can dự vào cuộc không kích Libya, các ...
-
[Dầu tăng nhẹ trở lại nhờ tin tốt của Đức](http://petrotimes.vn/dau-tang-nhe-tro-lai-nho-tin-tot-cua-duc-45731.html)Dầu thô tăng nhẹ trên sàn New York sau khi tăng trưởng kinh tế quý 1 của Đức cao hơn kỳ vọng, nhen nhóm niềm tin vào triển vọng nhu cầu nhiên liệu ...
-
[Giới đầu tư tranh mua dầu ngay khi giá giảm](http://petrotimes.vn/gioi-dau-tu-tranh-mua-dau-ngay-khi-gia-giam-45729.html)Phiên giao dịch cuối tuần, Brent trụ vững trong phiên giao dịch đầy biến động, dù rằng trước đó giá chao đảo giữa tăng và giảm bởi sức mạnh của đồng đô la, trong lúc ...
-
[Iraq: Cường quốc xuất khẩu dầu mỏ số 1 thế giới?](http://petrotimes.vn/iraq-cuong-quoc-xuat-khau-dau-mo-so-1-the-gioi-45727.html)Iraq đang trên đường thách thức ngôi vị số 1 của Saudi Arabia, khi tăng sản lượng dầu mỏ lên mức cao nhất trong vòng 10 năm qua và chuẩn bị đấu thầu ...
-
[IEA giảm dự báo nhu cầu dầu mỏ thế giới năm 2011](http://petrotimes.vn/iea-giam-du-bao-nhu-cau-dau-mo-the-gioi-nam-2011-45725.html)Giá dầu giảm 3% ngay sau khi IEA hạ dự báo tăng trưởng nhu cầu dầu năm 2011 xuống còn 1,3 triệu thùng/ngày, so với 1,4 triệu thùng/ngày đưa ra trước đó.
-
[Nơi đàn ông sợ bị phụ nữ "phục kích”](http://petrotimes.vn/noi-dan-ong-so-bi-phu-nu-phuc-kich_8221-45981.html)Sau vụ mùa, bất kể là ban ngày hay ban đêm những người đàn ông đều có thể gặp “nguy hiểm” khi đi ra ngoài một mình bởi họ có thể gặp phải sự “phục ...
-
[Nigeria: Giao tranh xảy ra tại khu vực nhiều dầu mỏ](http://petrotimes.vn/nigeria-giao-tranh-xay-ra-tai-khu-vuc-nhieu-dau-mo-45723.html)Ngày 11/5, giao tranh đã xảy ra giữa quân đội Nigeria và các tay súng nổi dậy ở bang Delta thuộc vùng châu thổ Niger, khu vực sản xuất dầu mỏ chính của Nigeria.
-
[Hàng trăm giếng dầu, khí đốt của Mỹ có nguy cơ bị nhấn chìm](http://petrotimes.vn/hang-tram-gieng-dau-khi-dot-cua-my-co-nguy-co-bi-nhan-chim-45721.html)Hai nhà máy lọc dầu và hàng trăm giếng dầu, khí đốt của Mỹ có nguy cơ bị lũ lụt nhấn chìm, một quan chức bang Louisiana ngày 11/5 cảnh báo.
-
[Trung Quốc đổ bộ vào các mỏ dầu Iraq bằng mọi giá](http://petrotimes.vn/trung-quoc-do-bo-vao-cac-mo-dau-iraq-bang-moi-gia-45719.html)Iraq là một trong những nơi còn cất trữ dầu mỏ phong phú cuối cùng của thế giới. Một nửa nhu cầu dầu mỏ Trung Quốc phụ thuộc vào nhập khẩu, do đó ...
-
[Dầu lửa đã khơi mào cuộc khủng hoảng kênh Suez](http://petrotimes.vn/dau-lua-da-khoi-mao-cuoc-khung-hoang-kenh-suez-45717.html)Nguyên nhân nào đã khiến liên quân Anh, Pháp và Israel mở cuộc tấn công Ai Cập vào năm 1956. Kênh đào Suez đóng vai trò quan trọng như thế nào đối với quyền lợi ...
-
[Dầu thô giảm 5,5%, xuống 98 USD/thùng](http://petrotimes.vn/dau-tho-giam-55-xuong-98-usdthung-45747.html)Nhu cầu nhiên liệu tại Mỹ tuần qua xuống thấp nhất trong vòng 2 năm kéo giá dầu giảm mạnh.
-
[Bé gái sơ sinh có tới 2 cái đầu](http://petrotimes.vn/be-gai-so-sinh-co-toi-2-cai-dau-45979.html)Trường hợp xảy ra với một em bé gái có 1 cơ thể và 2 đầu dính nhau.
-
[Argentina phát hiện giếng dầu mới trữ lượng lớn](http://petrotimes.vn/argentina-phat-hien-gieng-dau-moi-tru-luong-lon-45745.html)Ngày 11/5 dẫn thông báo của công ty dầu khí lớn nhất Argentina YPF, chi nhánh tập đoàn REPSOL của Tây Ban Nha, cho biết công ty này vừa phát hiện giếng dầu mới có ... [](http://petrotimes.vn/dung-ky-vong-gia-dau-som-tang-tro-lai-375086.html)
![ dung ky vong gia dau som tang tro lai](http://petrotimes.vn/stores/news_dataimages/hoangtram/012016/19/09/thumbnail/dung-ky-vong-gia-dau-som-tang-tro-lai_1.jpg)
###
[Đừng kỳ vọng giá dầu sớm tăng trở lại](http://petrotimes.vn/dung-ky-vong-gia-dau-som-tang-tro-lai-375086.html)
Hãy nhanh chóng thích nghi với mức giá dầu hiện nay, hay thậm chí thấp hơn nữa khi lượng cung ngày càng vượt quá nhu cầu. Đừng kỳ vọng giá dầu sẽ tăng trở lại trong thời gian ngắn, chuyên gia năng lượng Luay Al-Khatteeb ...

Server: Apache/2.2.15 (CentOS)

Cache-Control: max-age=600, private, must-revalidate


markdown:
Trang chủ
Sản phẩm
Cáp HDMI
Cáp VGA
Bộ chuyển đổi HDMI, VGA, AV
Cáp DVI
Cáp Displayport
Cáp Mini Displayport
Cáp HDMI To DVI
Cáp USB
Cáp Audio/Video
Cáp Cổng Com RS232
Bộ Chuyển Đổi KVM
Lan Cable
Bộ Sạc Điện USB
Cáp MHL
Khuyến mãi
Hỗ trợ
Download
Liên hệ
Sản phẩm
Cáp HDMI
Bộ Chia Tín Hiệu HDMI
HDMI to VGA
Chuyển đổi HDMI
Cáp Tín Hiệu HDMI
Thiết Bị Kết Nối HDMI
Cáp VGA
Bộ chuyển đổi HDMI, VGA, AV
Cáp DVI
Cáp Displayport
Cáp Mini Displayport
Cáp HDMI To DVI
Cáp USB
USB to HDMI, VGA, DVI
Dây Máy In
Bộ chia USB Hub
USB 3.1 Type C
Cáp USB 2.0
Cáp USB 3.0
Bộ Chuyển đổi USB
USB to LAN
Cáp Audio/Video
Cáp Audio Quang, Optical
Cáp Audio 3.5mm, 6.5mm
Cáp Coaxial
Bộ Chuyển Đổi Quang (Optical)
Cáp Cổng Com RS232
Bộ Chuyển Đổi KVM
Lan Cable
Bộ Sạc Điện USB
Thiết Bị Bluethooth
Phụ kiện Điện thoại, Tablet
Cáp MHL
Trang chủ
>
Sản phẩm
>
Bộ Sạc Điện USB
Bộ Sạc Điện USB
Sạc trên ô tô, Pin sạc dự phòng | Bộ sạc không dây chính hãng
Bộ sạc không dây, Pin dự phòng, Sạc trên ô tô, Bộ sạc đa năng dành cho điện thoại, máy tính bảng.
Phân phối Ugreen chuyên cung cấp và phân phối các loại
Bộ sạc không dây
,
sạc Ô tô 2 cổng usb
, sạc xe hơi, tẩu sạc ô tô,
Pin dự phòng
,
Bộ sạc điện đa năng
cho iphone, samsung Galaxy, ipab.... cao cấp chính hãng Ugreen.
Với các sản phẩm
sạc không dây SamSung
,
sạc dự phòng
,
sạc đ
a năng
chính hãng Ugreen đều được bảo hành 18 tháng và 1 đổi 1 trong thời gian bảo hành.
Phân phối Ugreen
luôn cập nhật các sản phẩm mới nhất trên thị trường của hãng sản xuất Ugreen với giá thành tốt nhất.
Chúng tôi sẵn có những bộ sạc đa năng có thể sạc cho 10 thiết bị cùng 1 lúc như điện thoại thông minh, máy tính bảng, máy ảnh...
Phân phối Ugreen
giao hàng trên Toàn Quốc
(
thanh toán khi nhận được hàng
)
Vì lợi ích và chất lượng tốt nhất cho khách hàng, chúng tôi nhận giao hàng tận nơi trong nội thành Hà Nội (với giá ship từ
10.000 - 40.000
đ)
Cam kết về chất lượng và sản phẩm đúng như trên Website:
http:// phanphoiugreen.com.vn
Hãy liên hệ với chúng tôi để được tư vấn mua hàng chính xác nhất:
Phân phối Ugreen chuyên các sản phẩm sạc trên ô tô, pin dự phòng, sạc không dây chính hãng Ugreen
Hotline:
0983 288 268 - 043 627 0146
Sạc nhanh hỗ trợ 2 cổng QuickCharge 3.0 Chính hãng Ugreen 30563
430,000 đ
Đầu chuyển Lightning sang Micro USB Ugreen 20745 chứng nhận MFI - Apple
250,000 đ
Cáp chuyển tín hiệu từ điện thoại ra tivi HDMI Ugreen 50291 dài 1.5m cao cấp
Giá liên hệ
Sạc nhanh hỗ trợ 2 cổng QuickCharge 3.0 Chính hãng Ugreen 30599
Giá liên hệ
Bộ kết nối Bluetooth âm thanh 4.2 Ugreen 40760 hỗ trợ aptX kết nối điện thoại trên Ô tô
Giá liên hệ
Bộ nhận Bluetooth 4.2 cho Loa chính hãng Ugreen 40968 cao cấp
650,000 đ
700,000 đ
Bộ phát bluetooth 4.2 hỗ trợ APTX chính hãng Ugreen 50213 chuẩn Quang ( Optical )
Giá liên hệ
850,000 đ
Bộ phát bluetooth 4.2 hỗ trợ APTX chính hãng Ugreen 40761 chuẩn 3.5mm
730,000 đ
Bộ thu âm thanh Bluetooth 4.2 từ điện thoại ra loa hỗ trợ APTX Ugreen 40756
650,000 đ
Bộ nhận phát Bluetooth 4.2 chính hãng Ugreen UG-40762
1,080,000 đ
1,080,000 đ
Kẹp điện thoại trên ôtô cao cấp Ugreen 30283
120,000 đ
Dây USB lighting dài 1m có chip mFI cao cấp UGREEN 20728
240,000 đ
Củ sạc USB 4 cổng Chính hãng Ugreen 20375
400,000 đ
Sạc nhanh Qualcomm Quick Charge 3.0 Chính hãng Ugreen 30912 hỗ trợ 2 cổng
450,000 đ
Sạc nhanh Qualcomm Quick Charge 3.0 hỗ trợ 2 cổng Chính hãng Ugreen 30920
450,000 đ
Đầu chuyển Lightning sang Micro USB Chuẩn MFI Chính hãng Ugreen 20746
250,000 đ
Hộp đựng ổ cắm điện thông minh Chính hãng Ugreen 30397
280,000 đ
Sạc dự phòng 2 trong 1 cho Apple iWatch chính hãng Ugreen 20844
1,250,000 đ
Bộ thu âm thanh có Micro Bluetooth 4.1 ugreen 30347 chính hãng
Giá liên hệ
450,000 đ
Bộ thu âm thanh có Micro Bluetooth 4.1 ugreen 30348 chính hãng
450,000 đ
Bộ kết nối Bluetooth âm thanh 4.1 Ugreen 30447 kết nối điện thoại trên Ô tô có hỗ trợ Micro
450,000 đ
USB Bluetooth 4.0 Ugreen 30443 Cao Cấp
220,000 đ
USB Bluetooth 4.0 Ugreen 30524 Cao Cấp
220,000 đ
Sản phẩm kết nối âm thanh Bluetooth 4.1 Ugreen 30444 từ Mobile, Tablet sang Loa, Âm ly
480,000 đ
550,000 đ
1
2
3
Tiếp
Kiến Thức Công Nghệ
PhanphoiUgreen - Thông báo lịch nghỉ tết nguyên đán MẬU TUẤT 2018
PhanphoiUgreen - Thông báo lịch nghỉ tết nguyên đán MẬU TUẤT 2018
Giới thiệu về công ty UGREEN ? Lịch sử ra đời của hãng Ugreen như nào ?
Kể từ khi thành lập vào năm 2009, Ugreen đã được chuyên trong các sản phẩm và giải pháp cho âm thanh chuyên nghiệp và kết nối video, và chuyển đổi đa phương tiện vv để đáp ứng nhu cầu khác nhau của khách hàng....
Ý Nghĩa ra đời đặc biệt của HÃNG UGREEN ?
Ugreen là gì ? Ý nghĩa sự ra đời chữ UGREEN ra sao ? Bạn sẽ thấy vô cùng thích thú cả từng chữ..DUYLINH LÀ NHÀ PHÂN PHỐI UGREEN tại VIỆT NAM. Hotline: 043.627.0146...
Thủ thuật - Tiện ích
Đừng bấm Refresh (F5) trên máy tính nữa !!!
Nhiều người khi thấy người khác nhấn Refresh máy tính, dần tạo thành thói quen cho bản thân, và họ không thấy yên tâm nếu không nhấn Refresh.
Cách tự động cập nhập ngày & giờ trên Android TV
Hiện nay một số dòng Android TV sau khi Reset hoặc ngắt điện sẽ không lưu nhớ được ngày & giờ. Duylinhcomputer sẽ hướng dẫn bạn cách Fix lỗi này.
Bí kíp giúp sóng Wi-fi tại nhà bạn mạnh hơn
Wi-Fi ở nhà bạn chậm rì rì khiến cho việc xem phim online hay làm việc gặp vấn đề? Đây là lúc bạn tìm cách nâng cấp chúng. Tìm hiểu ngay để giúp sóng tại nhà bạn MẠNH HƠN.
Hỗ trợ kỹ thuật
Hướng dẫn sử dụng chi tiết Bộ thu wifi TP-LINK
Hướng dẫn chi tiết sử dụng chi tiết Bộ thu wifi TP-LINK TL-WR823N Sau đây là hướng dẫn chi tiết sử dụng, thiết lập Bộ thu wifi TP-LINK TL-WR823N
Biến Bộ phát Wifi WR841N thành Bộ kích sóng (Repeater)
Sử dụng bộ phát wifi TL-WR841N thành Bộ thu sóng và phát lại Wifi (Repeater) rất đơn giản, các bạn chỉ cần làm theo các bước của Video sau...
Video Cách kết nối Đọc thẻ nhớ cho Iphone, Ipad rất dễ dàng
Hướng dẫn Kết nối Đầu đọc thẻ nhớ cho Iphone, Ipad chuẩn Lightning cao cấp Ugreen 30612 . GIAO HÀNG TOÀN QUỐC. Đ/C: Số - 10 lê thanh nghị - HBT - Hà Nội
Trang chủ
|
Bảo mật thông tin
|
Giới thiệu
|
Tin tức
|
Thông tin tài khoản
|
Hotline :
0972.313.310 - 0983.288.268
Chúng tôi trên facebook
Duy Linh Computer
Thông tin công ty
CÔNG TY TNHH ĐẦU TƯ TM & DV DUY LINH
Địa chỉ: Số
10
Lê Thanh Nghị - Hai Bà Trưng-HÀ NỘI
Hotline:
0243.627.0146
KD phân phối:
0983.288.268
Email: Phukienduylinh@gmail.com
Website:
http://Phanphoiugreen.com.vn
Thời gian làm việc: Từ 8h - 21h (Thứ 2 đến thứ 7)
Từ 9h - 19h30 (Chủ nhật)
Thời gian Bảo Hành: Từ
14h - 18h (Thứ 2 - T
hứ 7)
TAG
:
Cáp HDMI
|
HDMI to VGA
|
Cáp VGA
|
Cáp DVI
|
Cáp Displayport
|
Cáp Mini Displayport
|
Cáp USB Type C
|
Cáp máy in
|
Bộ chia usb
|
USB Bluetooth
| Dây loa | Optical(Quang) | Dây mạng RJ45 | Dây com RS232 | USB to Lan | Dây USB 3.0 | Cáp usb 2.0 | Dây Coaxial | HDMI to DVI | Đầu nối
Thiết kế website bởi
kenhdichvu.vn
Công ty
Giới thiệu công ty
Bản tin công ty
Bảo mật thông tin
Danh sách Đại Lý
Khách hàng
Chính Sách Bảo Hành
Phương Thức Vận Chuyển
Chính sách đổi hàng
TƯ VẤN BÁN HÀNG ONLINE:
0911.808.800
Kinh doanh: Mr.Linh
0983.288.268
Kinh doanh: Ms.Nga
0972.313.310
Bán lẻ: Mr.Tuyên
0963.570.740
Bán lẻ: Mr.Ngọc
0984 783 999
Bán lẻ Mr.Hải
0243.627.0146
Hỗ trợ Kỹ Thuật

Cache-Control: private

X-Powered-By-Plesk: PleskWin


markdown:
**HT. Thích Thiện Huệ hiệu trưởng trường cũng nhắn nhủ Tăng Ni sinh tốt nghiệp hãy vương minh xa hơn để thành đạt trong nhân cách đạo đức học theo những lời dạy của Đức Phật, lấy Giới – Định – Tuệ làm đường hướng học tập và hãy sống lục hòa thể hiện những người con Phật trong con đường phụng sự đạo pháp, hãy khắc phục bản thân bước lên con đường nghiêm cứu cao hơn để thể hiện mình trong tương lai.**
Đến tham dự và chứng minh buổi lễ: HT. Thích Thiện An, Thành viên HĐCM T.Ư; HT. Thích Thiện Huệ, Ủy viên HĐTS T.Ư, Trưởng Ban Trị Sự GHPGVN Tỉnh Đồng Tháp, Hiệu Trưởng TCPH Tỉnh Đồng Tháp; TT. Thích Chơn Minh, Ủy viên HĐTS T.Ư, Phó Ban TT BTS. GHPGVN Tỉnh Đồng Tháp; HT. Thích Thiện Năng, Phó BTS kiêm Trưởng Ban GDTN Tỉnh Đồng Tháp; cùng chư tôn đức Ban Trị Sự GHPGVN Tỉnh Đồng Tháp quang lâm chứng minh lễ.
Ông Bùi Minh Hùng, Phó GĐ Sở Nội Vụ, Trưởng Ban Tôn Giáo cùng lãnh đạo Tỉnh Đồng Tháp, chính quyền huyện Cao Lãnh và đông đảo Phật tử đến dự, chúc mừng.
Đại Đức Thích Chơn Tâm phó hiệu trưởng TCPH Tỉnh Đồng Tháp đã phát biểu khai mạc buổi lễ, Trường Trung Cấp Phật Học Tỉnh Đồng Tháp hình thành vào khoảng năm 1989, nhà trường đã mở được 6 khóa cho đến ngày nay. Tăng Ni sinh được học và được nhà trường đào tạo cho đến hôm nay, những vị đã tốt nghiệp đang phục vụ cho giáo hội ở tỉnh nhà. Khóa VI tốt nghiệp hôm nay đã kết thúc có những nổi lực trong việc học và tu nhà trường đã chon ra những vị có phần xuất sắc, học giỏi, chuyền cần tinh tấn được thành tựu cao. Kết thúc của TCPH Đồng Tháp, thì nhân duyên tại Học Viện Phật Giáo TP. HCM mở kháo mới, có nhiều Tăng Ni sinh thi vào các trường điển hình như 38 Tăng Ni sinh thi đổ vào Học Viện phần còn lại thì theo học Trường Cao Trung Phật Học tại TP. HCM.
Trong dịp tốt nghiệp TCPH Đồng Tháp đại diện chính quyền cũng đã chúc cho Tăng Ni sinh khóa VI và Tăng Ni sinh kháo VII cố gắng học theo những tấm gương chư tôn đức lãnh đạo giáo hội như HT. Vạn Đức, Cố HT. Thích Từ Nhơn, phát huy những kỹ năng, cách làm việc để làm cho vùng đất Đồng Tháp thêm phần phát triển.
HT. Thích Thiện Huệ hiệu trưởng trường cũng nhắn nhủ Tăng Ni sinh tốt nghiệp hãy vương minh xa hơn để thành đạt trong nhân cách đạo đức học theo những lời dạy của Đức Phật, lấy Giới – Định – Tuệ làm đường hướng học tập và hãy sống lục hòa thể hiện những người con Phật trong con đường phụng sự đạo pháp, hãy khắc phục bản thân bước lên con đường nghiêm cứu cao hơn để thể hiện mình trong tương lai.
Đại đức Thích Thiện Đạo thư ký trường đã báo cáo tổng kết khóa VI, Tăng Ni sinh đã trải qua 4 năm học hơn 1450 tiết học được giảng dạy tại trường. Tăng Ni sinh đã hoàn tất bài tiểu luận tốt nghiệp trong đó có 59 Tăng Ni sinh dạt thành tích khá giỏi, trong đó có 33 Tăng sinh và 26 Ni sinh. Nhà trường đã tăng quà khen thưởng cho 3 Tăng sinh, 4 Ni sinh đạt thành tích xuất sắc trong việc học và tu trong suốt 4 năm.
Ban Trị Sự GHPGVN Tỉnh Đồng Tháp tặng 3 tập thể: Ban Giám Hiệu trường TCPH Tỉnh Đồng Tháp niêm khóa 2009 -2013 (khóa VI), Lớp Tăng cơ sở 1 Chùa Thanh Lương, Huyện Cao lãnh; Lớp Ni cơ sở 2 Chùa Phước Huệ TX. Sa Đéc. Về cá nhân tuyên dương công đức Ban Giảng huấn và bam bảo trợ TCPH suốt 4 năm qua.
Nhân dịp tốt nghiệp Khóa VI TCPH Tỉnh Đồng Tháp, nhà trường cũng đã khai giảng khóa VII Trung cấp Phật học với 50 Tăng Ni sinh đủ điều kiện nhập học.
**Thích Huệ Nghiêm**
**Những tin mới hơn**
**Những tin cũ hơn**
|
|

Server: LiteSpeed

Cache-Control: max-age=0, private, no-store, no-cache, must-revalidate

Set-Cookie: nv3c_Ci0ee_sess=c5b1928e202e883a1425946a96b8e363387188514; path=/; domain=.phatgiaohungyen.vn; HttpOnly


markdown:
## Bùa Yêu
[2016](http://phimlt.com/search-year/2016), 16 Tập, bua yeu **Status:**
#### Tập 16/16 Vietsub
**Mới cập nhật:**20-07-2016 02:22:32 America/New_York **Đạo diễn:**Đang cập nhập **Diễn viên:**Đang cập nhập **Nhà sản xuất:**Vietsub **Quốc gia:** [Hàn Quốc vietsub](http://phimlt.com/country/han-quoc-vietsub/c11) **Thời lượng:**16 Tập **Thể loại:** [Tình Cảm](http://phimlt.com/the-loai/tinh-cam/g4), [Hài Hước](http://phimlt.com/the-loai/hai-huoc/g7). **Năm phát hành:** [2016](http://phimlt.com/search-year/2016) **TAG:** [bua yeu](http://phimlt.com/tag/bua+yeu)
- Hãy vote để ủng hộ phim!
Advertisement
### Hoặc chọn tập phim để xem:
Post by:
**Guest43941**
### Giới thiệu phim hay
- Cùng thể loại
- Phim bộ
- Phim lẻ
- Nhiều người xem
- Phim bộ Hàn Quốc vietsub346 viewsTập 15/16 Vietsub
- Phim bộ HongKong VNLT85849 viewsTập 12/12 FFVN
- Phim bộ HongKong VNLT3229 views35/35 FFVN
- Phim bộ Hàn Quốc921 viewsTập 127/150 LT
- Phim bộ Hàn Quốc560 viewsTập 9/18 LT
- Phim bộ Trung Quốc1210 viewsTập 25/34 LT
- Phim bộ Hồng Kông348 viewsTập 14/28 USLT
- Phim bộ Trung Quốc501 viewsTập 19/38 LT
- Phim bộ Việt Nam623 viewsTập 28/36 HDTV
- Phim bộ Hàn Quốc747 viewsTập 60/122 LT
- Phim bộ Hàn Quốc vietsub297 viewsTập 4/16 Vietsub
- Phim bộ Hàn Quốc421 viewsTập 20/120 LT
- Phim bộ Hàn Quốc vietsub153 views20/20 Vietsub
- Phim bộ HongKong VNLT497 viewsNgày 24/5 chiếu
- Phim bộ HongKong VNLT1755 views20/20 FFVN
- Phim bộ Hồng Kông295 views20/20 USLT
- Phim bộ Hàn Quốc vietsub 2018343 viewsTập 15/16 Vietsub
- Phim bộ HongKong VNLT 199285849 viewsTập 12/12 FFVN
- Phim bộ HongKong VNLT 20181764 viewsTập 5/30 FFVN
- Phim bộ HongKong VNLT 20183229 views35/35 FFVN
- Phim bộ Hàn Quốc 2013921 viewsTập 127/150 LT
- Phim bộ Hàn Quốc 2018560 viewsTập 9/18 LT
- Phim bộ Trung Quốc 20151210 viewsTập 25/34 LT
- Phim bộ Hồng Kông 2016348 viewsTập 14/28 USLT
- Phim lẻ Việt Nam 2018251 views1/1 HD
- Phim lẻ Hồng Kông 1993179 views1/1 USLT
- Phim lẻ Hồng Kông 1993213 views1/1 USLT
- Phim lẻ Việt Nam 20178534 viewsHDTV
- Phim lẻ Việt Nam 20179201 viewsNgày 12/4/2017
- Phim lẻ Việt Nam 20137344 viewsHDTV
- Phim lẻ Việt Nam 201710819 viewsHDTV
- Phim lẻ Việt Nam 20178621 viewsTập 3 HDTV
- Phim bộ Hồng Kông175618 viewsReup 50/50 USLT1983
- Phim bộ HongKong VNLT1760 viewsTập 5/30 FFVN2018
- Phim bộ Việt Nam73842 viewsTập 40/40 HDTV2015
- Phim bộ Trung Quốc501 viewsTập 19/38 LT2018
- Phim bộ Các loại khác57219 viewsTập 91 LT2017
- Phim bộ Hồng Kông75982 views20/20 USLT1990
- Phim bộ HongKong VNLT85849 viewsTập 12/12 FFVN1992
- Phim bộ Hồng Kông103851 views32/32 FFVN1995
- Phim bộ Việt Nam38105 views51/51 TVRip2016
- Phim bộ Các loại khác65793 views89/89 LT2017
- Phim bộ Trung Quốc1171 viewsTập 20/40 Vietsub2017
- Phim bộ Hàn Quốc vietsub343 viewsTập 15/16 Vietsub2018
- Phim bộ Việt Nam314 viewsTập 3/50 HDTV2018
- Phim bộ Hồng Kông55432 viewsReup 20/20 USLT1990
- Phim bộ Hồng Kông133732 viewsFix 40/40 USLT1986
- Phim bộ Trung Quốc199828 viewsTâp 86/86 VNLT2015
Nếu bạn ủng hộ +1 sẽ giúp người khác tìm thấy trang này dễ dàng hơn:
## Hướng dẫn:
Cập nhật phim
- Phim bộ mới
- Đã hoàn thành
- Phim lẻ mới
[Phải Lòng Chị Đẹp, Bao Ăn ...](http://phimlt.com/phim-bo/phai-long-chi-dep-bao-an-ca-ngay_3242/)Tập 15/16 Vietsub [Phi Hổ Cực Chiến (FFVN)](http://phimlt.com/phim-bo/phi-ho-cuc-chien-ffvn-_3248/)Tập 5/30 FFVN [Tiểu Thư Uy Quyền (LT)](http://phimlt.com/phim-bo/tieu-thu-uy-quyen-lt-_3218/)Tập 127/150 LT [Vượt Qua Án Tử (LT)](http://phimlt.com/phim-bo/vuot-qua-an-tu-lt-_3263/)Tập 9/18 LT [Tình Mãi Không Quên (LT)](http://phimlt.com/phim-bo/tinh-mai-khong-quen-lt-_3205/)Tập 25/34 LT [Ông Trùm Nghành Luật (USLT)](http://phimlt.com/phim-bo/ong-trum-nghanh-luat-uslt-_3262/)Tập 14/28 USLT [Ông Trùm Đá Quý (LT)](http://phimlt.com/phim-bo/ong-trum-da-quy-lt-_3261/)Tập 19/38 LT [Ông Bà Thổ Địa (LT)](http://phimlt.com/phim-bo/ong-ba-tho-dia-lt-_3217/)Tập 53/55 LT [Mộng Phù Hoa](http://phimlt.com/phim-bo/mong-phu-hoa_3222/)Tập 28/36 HDTV [Mãi Mãi Tuổi Thanh Xuân (LT)](http://phimlt.com/phim-bo/mai-mai-tuoi-thanh-xuan-lt-_3220/)Tập 60/122 LT [Chảo Lửa Tình Yêu](http://phimlt.com/phim-bo/chao-lua-tinh-yeu_3260/)Tập 4/16 Vietsub [Bên Nhau Mãi Thôi (LT)](http://phimlt.com/phim-bo/ben-nhau-mai-thoi-lt-_3259/)Tập 20/120 LT [Thâm Cung Kế (FFVN)](http://phimlt.com/phim-bo/tham-cung-ke-ffvn-_3249/)Ngày 24/5 chiếu [Truyện Từ Thế Giới Bên Kia ...](http://phimlt.com/phim-bo/truyen-tu-the-gioi-ben-kia-ffvn-_2605/)Tập 12/12 FFVN [Nghịch Duyên (FFVN)](http://phimlt.com/phim-bo/nghich-duyen-ffvn-_3200/)35/35 FFVN [THẦN ĐIÊU ĐẠI HIỆP](http://phimlt.com/phim-bo/than-dieu-dai-hiep_487/)32/32 FFVN [Mất Dấu 2 (FFVN)](http://phimlt.com/phim-bo/mat-dau-2-ffvn-_3258/)30/30 FFVN [Đại Thân Vương](http://phimlt.com/phim-bo/dai-than-vuong_3240/)20/20 Vietsub [Kẻ Trộm Thời Gian (FFVN)](http://phimlt.com/phim-bo/ke-trom-thoi-gian-ffvn-_3201/)20/20 FFVN [Bang Phái Phong Vân (USLT)](http://phimlt.com/phim-bo/bang-phai-phong-van-uslt-_3257/)20/20 USLT [Phù Thủy Tốt Bụng](http://phimlt.com/phim-bo/phu-thuy-tot-bung_3241/)20/20 Vietsub [Hoàng Hậu Ki (VN Lồng Tiếng)](http://phimlt.com/phim-bo/hoang-hau-ki-vn-long-tieng-_956/)51/51 LT [Thực Thần (VNLT) - Thần Ăn](http://phimlt.com/phim-bo/thuc-than-vnlt-than-an_960/)Tập 16/16 VNLT [Tình Yêu Không Đóng Cửa (LT)](http://phimlt.com/phim-bo/tinh-yeu-khong-dong-cua-lt-_3246/)44/44 LT [Bên Kia Sông](http://phimlt.com/phim-bo/ben-kia-song_3245/)40/40 HDTV [Bí Mật Ngọt Ngào (LT)](http://phimlt.com/phim-bo/bi-mat-ngot-ngao-lt-_3212/)102/102 VNLT [Quý Bà Cảnh Sát 2 (LT)](http://phimlt.com/phim-bo/quy-ba-canh-sat-2-lt-_3219/)Tập 20/20 LT [Hoàng Hậu 7 Ngày (LT)](http://phimlt.com/phim-bo/hoang-hau-7-ngay-lt-_3214/)20/20 LT [Bố Là Tất Cả (LT)](http://phimlt.com/phim-bo/bo-la-tat-ca-lt-_3238/)50/50 LT [Lòng Hiếu Động Thiên (USLT)](http://phimlt.com/phim-bo/long-hieu-dong-thien-uslt-_3236/)20/20 USLT [Con Đường Hoàn Lương](http://phimlt.com/phim-bo/con-duong-hoan-luong_3234/)48/48 HDTV [»»](/list/phimbo-completed) **Phim đủ bộ** [Gió Xuân](http://phimlt.com/phim-le/gio-xuan_3253/)1/1 HD [Tân Lãnh Huyết Thập Tam Ưng ...](http://phimlt.com/phim-le/tan-lanh-huyet-thap-tam-ung-uslt-_3250/)1/1 USLT [Tân Tiên Hạc Thần Châm (USLT)](http://phimlt.com/phim-le/tan-tien-hac-than-cham-uslt-_3251/)1/1 USLT [Sân Khấu Cải Lương: Tình Người](http://phimlt.com/phim-le/san-khau-cai-luong-tinh-nguoi_3142/)HDTV [Festival Đờn Ca Tài Tử Quốc ...](http://phimlt.com/phim-le/festival-don-ca-tai-tu-quoc-gia-lan-ii_3106/)Ngày 12/4/2017 [Sự Im Lặng](http://phimlt.com/phim-le/su-im-lang_3042/)HDTV [Xuân Cười](http://phimlt.com/phim-le/xuan-cuoi_2984/)HDTV [Gala Hài Tết](http://phimlt.com/phim-le/gala-hai-tet_2989/)Tập 3 HDTV [Lễ Hội Đón Chào Năm Mới](http://phimlt.com/phim-le/le-hoi-don-chao-nam-moi_2963/)Full HD [Nhạc Vàng Muôn Thuở](http://phimlt.com/phim-le/nhac-vang-muon-thuo_2831/)1/1 DVD [Đức Huy 50 Âm Nhạc](http://phimlt.com/phim-le/duc-huy-50-am-nhac_2832/)1/1 DVD [Gala Cười 2016](http://phimlt.com/phim-le/gala-cuoi-2016_2470/)1/1 HDTV [Gặp Nhau Cuối Năm](http://phimlt.com/phim-le/gap-nhau-cuoi-nam_2469/)1/1 HDTV [Quý Tử Bất Đắc Dĩ](http://phimlt.com/phim-le/quy-tu-bat-dac-di_2465/)Tập 4/4 HDTV [Gala Nhạc Việt 6](http://phimlt.com/phim-le/gala-nhac-viet-6_2174/)2/2 DVDRip SD [Vườn Hoa Âm Nhạc](http://phimlt.com/phim-le/vuon-hoa-am-nhac_2458/)DVDRip 5/5 [Chương Trình Ca Nhạc Mừng Xuân](http://phimlt.com/phim-le/chuong-trinh-ca-nhac-mung-xuan_2457/)BRrip 3/3 [Xuân Phát Tài 6](http://phimlt.com/phim-le/xuan-phat-tai-6_2449/)1/1 HD [»»](/list/phim-le) **Phim lẻ mới**
Các chuyên mục phim
Phim bộ
Thể loại
Loading Facebook Like-box plugin...

Server: cloudflare

X-Turbo-Charged-By: LiteSpeed

Set-Cookie: LANG=english; expires=Mon, 20-May-2019 09:51:45 GMT; path=/


markdown:
[1:] [http://www.megaupload.com/?d=WQ5S3W2F](http://www.megaupload.com/?d=WQ5S3W2F)
2:
[http://www.megaupload.com/?d=Y96SEN9O](http://www.megaupload.com/?d=Y96SEN9O)
3:
[http://www.megaupload.com/?d=PPHN2PI0](http://www.megaupload.com/?d=PPHN2PI0)
4:
[http://www.megaupload.com/?d=UWYZDM2U](http://www.megaupload.com/?d=UWYZDM2U)
5:
[http://www.megaupload.com/?d=IVT628KV](http://www.megaupload.com/?d=IVT628KV)
6:
[http://www.megaupload.com/?d=CIS1V2IV](http://www.megaupload.com/?d=CIS1V2IV)
7:
[http://www.megaupload.com/?d=MLT9XJQ0](http://www.megaupload.com/?d=MLT9XJQ0)
8:
[http://www.megaupload.com/?d=0XN638RR](http://www.megaupload.com/?d=0XN638RR)
9:
[http://www.megaupload.com/?d=EOHBF3O1](http://www.megaupload.com/?d=EOHBF3O1)
10:
[http://www.megaupload.com/?d=FLEE2JDE](http://www.megaupload.com/?d=FLEE2JDE)
11:
[http://www.megaupload.com/?d=3ZBPMD39](http://www.megaupload.com/?d=3ZBPMD39)
12:
[http://www.megaupload.com/?d=67DSCA25](http://www.megaupload.com/?d=67DSCA25)
13:
[http://www.megaupload.com/?d=VQUC5PCQ](http://www.megaupload.com/?d=VQUC5PCQ)
14:
[http://www.megaupload.com/?d=PHDZB5SY](http://www.megaupload.com/?d=PHDZB5SY)
15:
[http://www.megaupload.com/?d=AWK7X3B7](http://www.megaupload.com/?d=AWK7X3B7)
16:
[http://www.megaupload.com/?d=A89J1WDG](http://www.megaupload.com/?d=A89J1WDG)
17:
[http://www.megaupload.com/?d=PJKL9G6Q](http://www.megaupload.com/?d=PJKL9G6Q)
18:
[http://www.megaupload.com/?d=DD3LH8GK](http://www.megaupload.com/?d=DD3LH8GK)
19:
[http://www.megaupload.com/?d=H68W5LKT](http://www.megaupload.com/?d=H68W5LKT)
20:
[http://www.megaupload.com/?d=PSJX7QQ7](http://www.megaupload.com/?d=PSJX7QQ7)
21:
[http://www.megaupload.com/?d=F5W9R8UT](http://www.megaupload.com/?d=F5W9R8UT)
22:
[http://www.megaupload.com/?d=BXUD1E1N](http://www.megaupload.com/?d=BXUD1E1N)
23:
[http://www.megaupload.com/?d=4U9P3PKW](http://www.megaupload.com/?d=4U9P3PKW)
24:
[http://www.megaupload.com/?d=DVCZ4FR0](http://www.megaupload.com/?d=DVCZ4FR0)
25:
[http://www.megaupload.com/?d=OPVYT16M](http://www.megaupload.com/?d=OPVYT16M)
26:
[http://www.megaupload.com/?d=D464PXZR](http://www.megaupload.com/?d=D464PXZR)
27:
[http://www.megaupload.com/?d=WNJWNQ9F](http://www.megaupload.com/?d=WNJWNQ9F)
28:
[http://www.megaupload.com/?d=O1RUI3KV](http://www.megaupload.com/?d=O1RUI3KV)
29:
[http://www.megaupload.com/?d=7HXCVTSK](http://www.megaupload.com/?d=7HXCVTSK)
30:
[http://www.megaupload.com/?d=6ATHVJVK](http://www.megaupload.com/?d=6ATHVJVK)
31:
[http://www.megaupload.com/?d=5ZFF6HDI](http://www.megaupload.com/?d=5ZFF6HDI)
32:
[http://www.megaupload.com/?d=XGDQMKLF](http://www.megaupload.com/?d=XGDQMKLF)
33-34:
1:
[http://www.megaupload.com/?d=FFUI15F0](http://www.megaupload.com/?d=FFUI15F0)
2:
[http://www.megaupload.com/?d=1X3CAGOR](http://www.megaupload.com/?d=1X3CAGOR)
3:
[http://www.megaupload.com/?d=H4HXFESQ](http://www.megaupload.com/?d=H4HXFESQ)
4:
[http://www.megaupload.com/?d=2LZGCIMG](http://www.megaupload.com/?d=2LZGCIMG)
5:
[http://www.megaupload.com/?d=HVR8G48X](http://www.megaupload.com/?d=HVR8G48X)
35-36:
1:
[http://www.megaupload.com/?d=Z2RQABKA](http://www.megaupload.com/?d=Z2RQABKA)
2:
[http://www.megaupload.com/?d=60AGAZQ7](http://www.megaupload.com/?d=60AGAZQ7)
3:
[http://www.megaupload.com/?d=CB0ULDIG](http://www.megaupload.com/?d=CB0ULDIG)
4:
[http://www.megaupload.com/?d=HFC6ETFD](http://www.megaupload.com/?d=HFC6ETFD)
5:
[http://www.megaupload.com/?d=KXBDPB9W](http://www.megaupload.com/?d=KXBDPB9W)
37-38:
1:
[http://www.megaupload.com/?d=FOIBCY57](http://www.megaupload.com/?d=FOIBCY57)
2:
[http://www.megaupload.com/?d=774JJDYR](http://www.megaupload.com/?d=774JJDYR)
3:
[http://www.megaupload.com/?d=7PD0FGHN](http://www.megaupload.com/?d=7PD0FGHN)
4:
[http://www.megaupload.com/?d=2X3WJG71](http://www.megaupload.com/?d=2X3WJG71)
5:
[http://www.megaupload.com/?d=OZV6R6EF](http://www.megaupload.com/?d=OZV6R6EF)
39-40:
1:
[http://www.megaupload.com/?d=WBF4WFI6](http://www.megaupload.com/?d=WBF4WFI6)
2:
[http://www.megaupload.com/?d=BHRJ3ZBG](http://www.megaupload.com/?d=BHRJ3ZBG)
3:
[http://www.megaupload.com/?d=OI705N51](http://www.megaupload.com/?d=OI705N51)
4:
[http://www.megaupload.com/?d=IB88AFL2](http://www.megaupload.com/?d=IB88AFL2)
5:
[http://www.megaupload.com/?d=SEGV93CN](http://www.megaupload.com/?d=SEGV93CN)
41-42:
1:
[http://www.megaupload.com/?d=BC8ISBKZ](http://www.megaupload.com/?d=BC8ISBKZ)
2:
[http://www.megaupload.com/?d=5QNG8H6P](http://www.megaupload.com/?d=5QNG8H6P)
3:
[http://www.megaupload.com/?d=AIMTQXOD](http://www.megaupload.com/?d=AIMTQXOD)
4:
[http://www.megaupload.com/?d=6EW13OZK](http://www.megaupload.com/?d=6EW13OZK)
5:
[http://www.megaupload.com/?d=QI11D3GM](http://www.megaupload.com/?d=QI11D3GM)
43-44:
1:
[http://www.megaupload.com/?d=2DY3LSIC](http://www.megaupload.com/?d=2DY3LSIC)
2:
[http://www.megaupload.com/?d=5261KTMV](http://www.megaupload.com/?d=5261KTMV)
3:
[http://www.megaupload.com/?d=18RSV1JV](http://www.megaupload.com/?d=18RSV1JV)
4:
[http://www.megaupload.com/?d=9P5U0VEL](http://www.megaupload.com/?d=9P5U0VEL)
5:
[http://www.megaupload.com/?d=JOESOYQV](http://www.megaupload.com/?d=JOESOYQV)
45-46:
1:
[http://www.megaupload.com/?d=4H2NSXEI](http://www.megaupload.com/?d=4H2NSXEI)
2:
[http://www.megaupload.com/?d=RS6KCV70](http://www.megaupload.com/?d=RS6KCV70)
3:
[http://www.megaupload.com/?d=UPGEZ30Z](http://www.megaupload.com/?d=UPGEZ30Z)
4:
[http://www.megaupload.com/?d=OAKT9W8X](http://www.megaupload.com/?d=OAKT9W8X)
5:
[http://www.megaupload.com/?d=Z7S694NZ](http://www.megaupload.com/?d=Z7S694NZ)
47-48:
1:
[http://www.megaupload.com/?d=2FU0LCL4](http://www.megaupload.com/?d=2FU0LCL4)
2:
[http://www.megaupload.com/?d=2HFJOT3N](http://www.megaupload.com/?d=2HFJOT3N)
3:
[http://www.megaupload.com/?d=7IWD60SF](http://www.megaupload.com/?d=7IWD60SF)
4:
[http://www.megaupload.com/?d=YQU4HOL6](http://www.megaupload.com/?d=YQU4HOL6)
5:
[http://www.megaupload.com/?d=7YM1FAV1](http://www.megaupload.com/?d=7YM1FAV1)
49-50:
1:
[http://www.megaupload.com/?d=RXQ04GCC](http://www.megaupload.com/?d=RXQ04GCC)Winrar file unrar before joining
2:
[http://www.megaupload.com/?d=VKT1EE1Y](http://www.megaupload.com/?d=VKT1EE1Y)
3:
[http://www.megaupload.com/?d=KGRZUNWO](http://www.megaupload.com/?d=KGRZUNWO)
4:
[http://www.megaupload.com/?d=TGRQ25OR](http://www.megaupload.com/?d=TGRQ25OR)
5:
[http://www.megaupload.com/?d=Z370FLTB](http://www.megaupload.com/?d=Z370FLTB)
51-52:
1:
[http://www.megaupload.com/?d=C4M1KKER](http://www.megaupload.com/?d=C4M1KKER)
2:
[http://www.megaupload.com/?d=N9JHCQIH](http://www.megaupload.com/?d=N9JHCQIH)
3:
[http://www.megaupload.com/?d=GVJKQ87Q](http://www.megaupload.com/?d=GVJKQ87Q)
4:
[http://www.megaupload.com/?d=HEIN36YN](http://www.megaupload.com/?d=HEIN36YN)
5:
[http://www.megaupload.com/?d=3NOBJ5VF](http://www.megaupload.com/?d=3NOBJ5VF)
53-54:
1:
[http://www.megaupload.com/?d=FZM0Z617](http://www.megaupload.com/?d=FZM0Z617)
2:
[http://www.megaupload.com/?d=AGOX3BRT](http://www.megaupload.com/?d=AGOX3BRT)Winrar file unrar before joining
3:
[http://www.megaupload.com/?d=DKV85584](http://www.megaupload.com/?d=DKV85584)
4:
[http://www.megaupload.com/?d=9KM1989G](http://www.megaupload.com/?d=9KM1989G)
5:
[http://www.megaupload.com/?d=7OM59V5A](http://www.megaupload.com/?d=7OM59V5A)
55-56:
1:
[http://www.megaupload.com/?d=XOU2C67P](http://www.megaupload.com/?d=XOU2C67P)Winrar file unrar before joining
2:
[http://www.megaupload.com/?d=35W9YTDM](http://www.megaupload.com/?d=35W9YTDM)
3:
[http://www.megaupload.com/?d=EAJXFEAN](http://www.megaupload.com/?d=EAJXFEAN)
4:
[http://www.megaupload.com/?d=H3QR7KFO](http://www.megaupload.com/?d=H3QR7KFO)
5:
[http://www.megaupload.com/?d=26GU50J9](http://www.megaupload.com/?d=26GU50J9)
57-58:
1:
[http://www.megaupload.com/?d=4GRWMA97](http://www.megaupload.com/?d=4GRWMA97)
2:
[http://www.megaupload.com/?d=K78K25PU](http://www.megaupload.com/?d=K78K25PU)
3:
[http://www.megaupload.com/?d=U2PKVU6T](http://www.megaupload.com/?d=U2PKVU6T)
4:
[http://www.megaupload.com/?d=7OFKYMZE](http://www.megaupload.com/?d=7OFKYMZE)
5:
[http://www.megaupload.com/?d=G02VONPE](http://www.megaupload.com/?d=G02VONPE)
59-60:
1:
[http://www.megaupload.com/?d=J0KWHWIE](http://www.megaupload.com/?d=J0KWHWIE)
2:
[http://www.megaupload.com/?d=9X39NV4H](http://www.megaupload.com/?d=9X39NV4H)
3:
[http://www.megaupload.com/?d=W2C1CJFX](http://www.megaupload.com/?d=W2C1CJFX)
4:
[http://www.megaupload.com/?d=C1ZJIUDF](http://www.megaupload.com/?d=C1ZJIUDF)
5:
[http://www.megaupload.com/?d=101MAO2T](http://www.megaupload.com/?d=101MAO2T)
61-62End:
1:
[http://www.megaupload.com/?d=8R0J2EJ5](http://www.megaupload.com/?d=8R0J2EJ5)
2:
[http://www.megaupload.com/?d=KAXZZCNE](http://www.megaupload.com/?d=KAXZZCNE)
3:
[http://www.megaupload.com/?d=9UG9A4Q4](http://www.megaupload.com/?d=9UG9A4Q4)
4:
[http://www.megaupload.com/?d=5SVQYEX9](http://www.megaupload.com/?d=5SVQYEX9)
5:
[http://www.megaupload.com/?d=SJG1SDX0](http://www.megaupload.com/?d=SJG1SDX0) [Kevin Dinh](http://vietsn.com/forum/member.php?u=7)
http://vietsn.com/forum/showthread.php?t=300208
## Không có nhận xét nào:
## Đăng nhận xét


markdown:
# Không chỉ diễn xuất, fan còn bất ngờ với giọng hát thật của Bảo Thanh!
Bảo Thanh – nữ diễn viên chính của “Sống chung với mẹ chồng” khiến nhiều fan vô cùng thích thú khi khoe giọng hát trong loạt bản hit đình đám như “Có em chờ”, “Tình thôi xót xa”,…
Sau “Sống chung với mẹ chồng”, Bảo Thanh đã vụt sáng trở thành một gương mặt nổi bật trong dàn nữ diễn viên miền Bắc. Mọi nhất cử, nhất động của cô đều đặc biệt được cư dân mạng chú ý. Mới đây, Bảo Thanh đã livestream trò chuyện với người hâm mộ. Không chỉ gây ấn tượng với vẻ thân thiện, gần gũi, nàng dâu Vân của “Sống chung với mẹ chồng” còn khiến ai nấy phải bất ngờ khi khoe giọng hát nhiều cảm xúc. Cô liên tiếp “chiêu đãi” fan với loạt bản hit đình đám như “Có em chờ”, “Yêu là tha thu”, Tình thôi xót xa”…
Được biết, đây không phải là lần đầu tiên Bảo Thanh khoe giọng hát với người hâm mộ. Trước đó, cô từng tự tin thể hiện ca khúc “Tình thôi xót xa” trong một chương trình truyền hình.
![ ](http://kenh14cdn.com/2017/19731971-10207546877790096-6182989873594558063-n-1499847065983.jpg)

Server: Nginx

X-Powered-By: VPSSIM

X-Rocket-Nginx-Bypass: No