markdown:
##
Posted On Monday, June 30, 2008 at
at
[MVP - Model View Presenter](http://nthoai.blogspot.com/2008/06/mvp-model-view-presenter.html)
[6:05 PM](http://nthoai.blogspot.com/2008/06/mvp-model-view-presenter.html)by Van Nguyen [](https://www.blogger.com/post-edit.g?blogID=3978293580246860892&postID=1508613222466389840&from=pencil)
Giới thiệu
- Trong bài viết giới thiệu về mô hình
[MVC](http://nthoai.blogspot.com/2008/06/mvc-model-view-controller.html), chúng ta đã đề cập đến các nhược điểm của ngôn ngữ ASP. Có thể thấy hiện giờ ít trang web nào sử dụng công nghệ ASP cũ để phát triển nữa mà thay vào đó là các ngôn ngữ mới hơn, tiện ích hơn như PHP, ASP.NET, Java, v.v. Microsoft giới thiệu ngôn ngữ ASP.NET với điểm nhấn tách riêng các thành phần giao diện và xử lý dữ liệu bussiness logic bằng mô hình code-behind. ASP.NET có vẽ như là một lựa chọn tốt cho các ứng dụng web đơn giản, nhưng chính mô hình code-behind sẽ gây ra một số khó khăn cho các ứng dụng web vừa và lớn:
- Code-behind dường như được thiết kế để làm quá nhiều việc, nó vừa là một nơi để xử lý các event, kiểm soát các workflow trong chương trình và nó còn là một layer trung gian giữa dữ liệu bên dưới và giao diện phía trên. Người lập trình có thể viết mọi thứ trong code-behind và làm cho nó trở nên vô cùng rối rắm. Để cho code-behind làm quá nhiều thứ sẽ làm cho code của bạn khó kiểm soát và khó test (Unit Test). Trong những ứng dụng web lớn, người ta xem một design tốt khi nó giảm thiểu sự phụ thuộc lẫn nhau giữa các tầng (layer) và làm sao để cho code-behind càng đơn giản càng tốt. Với mô hình Model-View-Presenter, chúng ta sẽ thấy rằng code-behind được giữ cho vô cùng đơn giản và không hề dính dáng gì đến những xử lý trên giao diện Web.
- Một nhược điểm khác của code-behind là nó hầu như rất khó để sử dụng lại những xử lý giao diện (presentation logic) giữa những trang code-behind khác nhau nếu không đưa các xử lý đó ra các lớp Utility hay Helpers để tránh trùng lặp code. Tất nhiên để làm được điều đó cần một thời gian để tổ chức các lớp cho thich hợp. Tuy nhiên, nó thường dẫn chúng ta đến việc thiết kế các lớp một cách rời rạc và giống như khi sử dụng ASP. Trong một design tốt, mỗi class trong hệ thống nên có duy nhất một nhiệm vụ và mục đích rõ ràng, nếu chúng ta cần tạo ra một class chỉ để tránh trùng lặp code giữa 2 hoặc nhiều nơi khác thì đó là một dấu hiệu xấu, một thiết kế tồi.
- Và một nhược điểm cố hữu mà tôi thường nhắc đến là khả năng sử dụng Unit Test để test các lớp code-behind này. Các lớp code-behind đều kế thừa từ System.Web.UI.Page nên khó có thể viết các Unit Test một cách tự nhiên và thuận lợi được.
- Đã có nhiều kĩ thuật được tìm ra để giải quyết vấn đề của code-behind. Chẳng hạn như
[Castle Monorail project](http://www.castleproject.org/monorail/index.html) đã kế thừa những lợi điểm của [Ruby-On-Rails](http://www.rubyonrails.org/) và không sử dụng mô hình ASP.NET event. Thực ra cũng giống như [ASP.NET MVC Framework](http://nthoai.blogspot.com/2008/06/aspnet-va-mvc-framework.html), Castle Monorail hướng người lập trình đến cách phát triển ứng dụng Web theo MVC hơn là MVP, và khi áp dụng những framework này, chúng ta sẽ làm web ASP.NET theo một cách hoàn toàn khác, không có postback, không có server controls,... Khác với các framework hỗ trợ MVC, các framework hỗ trợ MVP là những giải pháp trong đó vẫn giữ mô hình event của ASP.NET nhưng hướng đến mục tiêu làm cho code-behind càng đơn giản càng tốt. Model-View Presenter sẽ giúp bạn làm được chuyện đó mà không cần dựa trên một framework nào cả. Đó cũng chính là lý do rất nhiều lập trình viên Web đã chọn MVP thay vì MVC trước khi có những framework hỗ trợ MVC như hiện nay.
- Bên cạnh các
[ASP.NET MVC Framework](http://nthoai.blogspot.com/2008/06/aspnet-va-mvc-framework.html), Castle Monorail, hiện nay đã có những framework hỗ trợ MVP cho .NET như [MVC# Framework](http://www.mvcsharp.org/) và [NMVP Framework](http://www.codeplex.com/nmvp). Hi vọng tôi có thời gian tìm hiểu và chia sẽ với các bạn muốn quan tâm. Trong bài viết này, tôi sẽ trình bay khái quát lý thuyết suông về MVP; một sample code sẽ được giới thiệu trong bài tiếp theo. [http://nthoai.blogspot.com](http://nthoai.blogspot.com/))
- Nhiều người cho rằng MVP là một design biến đổi của
[MVC](http://nthoai.blogspot.com/2008/06/mvc-model-view-controller.html). Điểm khác nhau dễ thấy nhất là Presenter và Controller ![50 :bbpraroi:](http://igame.vn/f/images/smilies/BBP_smilies/50.gif)
- Trong môi trường .NET, cùng một Presenter có thể được sử dụng cho View trên web như các trang ASP.NET hoặc được sử dụng cho các Form trong Windows Form Application. Các Presenter đọc và ghi dữ liệu thông qua một Interface của .NET nên nó hoàn toàn độc lập với layer View. Chính nhờ cách làm này mà ta có thể áp dụng Unit Test cho các lớp xử lý Presenter rất dễ dàng và nó cũng chính là một trong những lợi ích lớn nhất của MVP cho khả năng tái sử dụng.
![cssbody=[boxHoverBody] cssheader=[boxHoverHeader] header=[Một cấu trúc solution áp dụng MVP] body=[Đây chỉ là một sample, có rất nhiều cách tổ chức solution ra các thành phần Model View Presenter khác nhau] Model View Presenter Solution Structure](http://img413.imageshack.us/img413/1786/mvpsolutionoq0.jpg)
Cập nhật View
- Khi thành phần dữ liệu Model được cập nhật, View cũng sẽ phải được cập nhật để hiển thị những thay đổi. Quá trình cập nhật View có thể được thực hiện bằng nhiều cách khác nhau. Có lẽ cũng từ những cách này mà Model-View-Presenter được chia thành hai loại là Passive View và Supervising Controller.
- Trong mô hình Passive View, Presenter sẽ cập nhật view tương ứng bằng cách đọc dữ liệu trực tiếp từ Model rồi set lên View, do đó các lớp View sẽ không biết gì về thay đổi dữ liệu bên dưới. Hay nói cách khác chúng hoàn toàn bị động theo như trên gọi.
- Còn trong mô hình Supervising Controller, các lớp View sẽ tương tác trực tiếp với Model bên dưới để đọc dữ liệu mà không cần thông qua các lớp Presenter. Presenter sẽ cập nhật Model; nó chỉ thay đổi những control trên View trong trường hợp có những xử lý giao diện phức tạp mà không thể khai báo trước chẳng hạn như ẩn hiện control, đổi màu text,…
- Quyết định dùng Passive View hay Supervising Controller thường dựa trên nhu cầu test tự động của ứng dụng. Nếu bạn muốn làm một ứng dụng có thể test tự động dể dàng và cover hầu hết các xử lý bên trong thì Passive View là một lựa chọn thích hợp, mọi UI logic đều được test bằng cách viết lớp test cho các Presenter. Mặt khác, nếu bạn thích code đơn giản hơn thì Supervising Controller có vẻ là một lựa chọn thích hợp hơn. Đối với những thay đổi đơn giản trên giao diện, bạn cũng không cần đưa những xử lý cho các thay đổi đó vào lớp Presenter. Khi chọn lựa giữa Passive View và Supervising Controller, bạn nên cân nhắc các điều sau đây:
- Cả hai cách đều cho phép bạn tăng khả năng test tự động cho các xử lý giao diện (presentation logic)
- Passive View thường cung cấp khả năng test cao hơn Supervising Controller bởi vì tất cả các xử lý giao diện được đặt trong các lớp Presenter.
- Supervising Controller sẽ đỡ phải code nhiều như Passive View bởi vì Passive View không cần thực hiện những cập nhật đơn giản cho View.
Tương tác với dữ liệu
- Bạn cần phân biệt rõ Model với Domain, hai khái niệm này hoàn toàn khác nhau. Chúng ta có thể implement các lớp tương tác với dữ liệu bằng nhiều cách khác nhau. Trong một số trường hợp, có thể bạn sẽ phải sử dụng
[Observer Pattern](http://en.wikipedia.org/wiki/Observer_pattern)cho các Presenter và Model. Nó sẽ giúp cho Presenter nhận những events từ Model khi có sự thay đổi và từ đó cập nhật thay đổi đó lên trên View. Thông thường, người ta sẽ làm ra các lớp Service/Manager, các lớp này sẽ đóng vai trò như các lớp Bussiness Logic trong layer Model để giúp Presenter tương tác với database bên dưới:
Các nhược điểm của MVP
- Có nhiều lớp, nhiều layer phải implement; có nghĩa độ phức tạp của ứng dụng sẽ tăng.
- Bạn phải nghĩ ra một cách để kết hợp giữa các Views và các Presenters. Trong ASP.NET thì các lớp Code-Behind sẽ implement một interface IView nào đó và sử dụng một member Presenter.
- Mô hình Model không biết gì về Presenter. Vì thế nếu dữ liệu Model bị thay đổi từ một chương trình khác thay vì bởi Presenter thì phải nghĩ ra một cách để Presenter biết. Các bạn có thể implement chức năng này nếu cần bằng cách sử dụng các events, hoặc tham khảo thiết kế Observer Pattern.
Tài liệu tham khảo:
[http://msdn.microsoft.com/en-us/library/cc304728.aspx](http://msdn.microsoft.com/en-us/library/cc304728.aspx) [http://www.codeproject.com/KB/architecture/ModelViewPresenter.aspx](http://www.codeproject.com/KB/architecture/ModelViewPresenter.aspx) [http://en.wikipedia.org/wiki/Model_View_Presenter](http://en.wikipedia.org/wiki/Model_View_Presenter)
Trong bài sau tôi sẽ trình bày một sample cho Supervisinng Controller.
![19 :bbpxtay:](http://igame.vn/f/images/smilies/BBP_smilies/19.gif)
##
Posted On Thursday, June 26, 2008 at
at
[ASP.NET MVC Project templates cho VS.NET 2005](http://nthoai.blogspot.com/2008/06/aspnet-mvc-project-template-vsnet2005.html)
[6:33 PM](http://nthoai.blogspot.com/2008/06/aspnet-mvc-project-template-vsnet2005.html)by Van Nguyen [](https://www.blogger.com/post-edit.g?blogID=3978293580246860892&postID=3244763374806972329&from=pencil)
- Để có thể tạo được project web ASP.NET với mô hình MVC framework, các bạn phải download
[ASP.NET MVC Preview 3 Visual Studio Templates](http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=aspnet&ReleaseId=13792) và chỉ có thể cài được khi bạn đã có VS.NET 2008 hoặc VS.NET Express 2008. Đối với những bạn chỉ có VS.2005 trong máy thì thật là bực mình vì …
làm biếng đi mua đĩa VS.2008 mà lại muốn test ngay xem MVC trong ASP.NET như thế nào. Đối với một số người thì không thể có VS.NET 2008 để sử dụng vì bản quyền. Tôi đã táy máy để chuyển những template từ trang CodePlex để có thể install và chạy được với VS.NET 2005.
Bạn có thể download template cho VS.NET 2005 ở link sau:
[1st mirror: ASPNET_MVC_Project_Template_for_VSNET_2005.html](http://www.4shared.com/file/52810888/97a76567/ASPNET_MVC_Project_Template_for_VSNET_2005.html)
Hoặc ở link sau
[2nd mirror: ASPNET_MVC_Project_Template_for_VSNET_2005.html](http://nvthoai.googlepages.com/ASP.NETMVCProjectTemplateforVS.NET20.vsi)
Tuy nhiên có một số điều lưu ý:
- Nếu bạn vừa cài VS.NET 2005 và VS.NET 2008 thì tất nhiên cũng chẳng cần install cái setup của tôi làm gì. Khi bạn cài bản template của Codeplex, các template mặc định sẽ được chép vào các thư mục của VS.NET 2005 và mặc định cả 2 version đều có thể hiểu được các template này. Tuy nhiên template của CodePlex sẽ không chạy được cho VS.NET 2005 vì project được tạo ra từ template này chỉ hiểu được trên VS.NET 2008 (
[cú pháp C# 3.0](http://msdn.microsoft.com/en-us/vcsharp/aa336745.aspx)). Vì vậy nếu như bạn muốn install phiên bản riêng cho VS.NET 2005 thì hãy bỏ check các Item Template và chỉ chọn install 2 project template ở cuối cùng như trong hình. Nếu bạn vẫn chọn và install, trình install sẽ hỏi bạn có chép đè file có sẵn từ lần install trước hay không, và bạn có thể chép đè vẫn không sao vì các item template có thể hiểu được trên cả VS.NET 2005 và VS.NET 2008. ![cssbody=[boxHoverBody] cssheader=[boxHoverHeader] header=[Hình gì đây? :|] body=[Bạn có thể chọn những mục để install, hai mục cuối cùng là template ASP.NET MVC project cho VB và C#] ASP.NET MVC Framework project template for VS.NET 2005](http://img372.imageshack.us/img372/4825/templateinstallss5.png)
Hình 1: Bạn có thể chọn những mục để install.
- Tôi đã chỉnh sửa một số nơi trong template gốc của CodePlex để project tạo ra có thể build được trên VS.NET 2005 cụ thể là sửa trong file global.asax.cs. Trong phần routing ở VS.NET 2008 có hỗ trợ các extension API mà VS.NET 2005 không thể hiểu được buộc lòng tôi phải đổi sang kiểu code truyền thống
![31 :bbpbuon:](http://igame.vn/f/images/smilies/BBP_smilies/31.gif)
![cssbody=[boxHoverBody] cssheader=[boxHoverHeader] header=[Hình gì đây? :|] body=[Tôi đã sửa lại temlate để có thể build project MVC] ASP.NET MVC Framework project template for VS.NET 2005](http://img381.imageshack.us/img381/4845/changedvs4.png)
Hình 2: Đổi sang kiểu code truyền thống để có thể build.
- Và sau khi install xong, các bạn sẽ thấy các template mới khi muốn tạo project mới:
![cssbody=[boxHoverBody] cssheader=[boxHoverHeader] header=[Hình gì đây? :|] body=[Sau khi install, các template sẽ xuất hiện bên trong dialog new project] ASP.NET MVC Framework project template for VS.NET 2005](http://img511.imageshack.us/img511/5598/createprojectxs6.png)
Hình3: Project templates sau khi install
Trong mấy ngày tới, tôi sẽ nghiên cứu và chế ra cái template có sẵn Unit Test.
![46 :bbpsdieu2:](http://igame.vn/f/images/smilies/BBP_smilies/46.gif)
##
Posted On Tuesday, June 24, 2008 at
at
[ASP.NET và MVC Framework](http://nthoai.blogspot.com/2008/06/aspnet-va-mvc-framework.html)
[10:55 PM](http://nthoai.blogspot.com/2008/06/aspnet-va-mvc-framework.html)by Van Nguyen [](https://www.blogger.com/post-edit.g?blogID=3978293580246860892&postID=8645765789787481505&from=pencil) ![cssbody=[boxHoverBody] cssheader=[boxHoverHeader] header=[Hình gì dây -,- ?] body=[Hình minh họa ASP.NET Model View Controller Framework] ASP.NET Model View Controller Framework](http://dotnetslackers.com/images/articleimages/mvc.jpg)
- Ai từng sử dụng qua ngôn ngữ ASP cũng biết rằng khá bất tiện khi phải xử lý code giao diện chung với những xử lý bussiness logic. Những xử lý để đọc dữ liệu database viết xen kẽ với những phần code định dạng HTML làm cho ứng dụng web rất khó bảo trì và khó tái sử dụng. Sau khi version 4.0 của IIS ra đời năm 1997, Bác Bill cùng các đồ đệ tiếp tục nghiên cứu một mô hình web application để giải quyết vẫn đề trên của ASP: tách rời giữa phần hiển thị và phần nội dung. Sau 4 năm nghiên cứu với một loạt những phiên bản beta ở các năm 2000 và 2001, ASP.NET 1.0 đã được công bố vào tháng 1 năm 2002, sau đó là version 1.1 ở tháng 4 năm 2003. Mô hình code-behind của ASP.NET đánh dấu một bước tiến so với người anh em ASP, nó khuyến khích người viết web trên nền .NET xây dựng những ứng dụng với sự tách bạnh rõ ràng giữa các thành phần hiển thị và nội dung mặc dù vẫn có thể viết theo style của ASP, mọi xử lý viết thẳng vào file aspx, ascx. Trên lý thuyết, mô hình này sẽ giúp những web designer chủ động thiết kế ra giao diện của ứng dụng mà không sợ ảnh hưởng đến những phần code xử lý bên dưới. Điều này dường như giống với ý tưởng tách rời giữa controller và view trong mô hình Model-View-Controller framework.
- Trong một số bài viết về cách implement
[MVC](http://nthoai.blogspot.com/search/label/MVC)cho ASP.NET, các tác giả thường cho rằng Code Behind của 1 trang ASP.NET là controller, các file aspx, ascx chính là các View. Theo tôi điều này chỉ đúng một phần vì các nguyên nhân sau:
1/Với mô hình Code Behind, đúng là đã có sự tách riêng giữa phần hiển thị (aspx, ascx) và các xử lý bussiness logic. Tuy nhiên người lập trình chỉ có thể làm được chuyện tách riêng phần View và Controller. Trong khi phần Model nếu không làm khéo sẽ vẫn dính chặt với vần controller và chẳng dễ test nó chút nào. Nếu bạn viết code lấy dữ liệu từ database ngay trong file code behind của 1 trang thì rõ ràng Model và Controller của bạn dính thành 1 cục và không thể test được bằng Unit Test. Như vậy người không biết sẽ vô tình làm code của mình khó test, khó bảo quản và khó sử dụng lại.
2/Các lớp Code Behind của ASP.NET đều kế thừa từ System.Web.Page, như vậy controller theo kiểu này cũng không thể dùng Unit Test để test các xử lý bussines logic. Đó là điều mà các fan của Unit Test không thể chấp nhận được. Ngoài ra, với sự phụ thuộc vào namespace System.Web như vậy, những xử lý của bạn sẽ không thể sử dụng lại khi muốn đổi một ứng dụng web sang ứng dụng windows form.
- Ngoài các lý do trên, có 1 điều nữa giúp tôi khẳng định Mô hình Code Behind của ASP.NET không theo
[MVC](http://nthoai.blogspot.com/search/label/MVC), đó chính là sự ra đời của framework ASP.NET MVC gần đây và một số [framework MVC khác](http://www.castleproject.org/monorail/index.html)cho ASP.NET.
- ASP.NET MVC Framework là một
[Model-View-Controller](http://nthoai.blogspot.com/search/label/MVC)framework được Microsoft thêm vào bộ ASP.NET. Nó cho phép người làm phần mềm xây dựng những Web application theo ý tưởng của [MVC](http://nthoai.blogspot.com/search/label/MVC), gồm 3 thành phấn Model, View và Controller. Một Model tượng trưng cho một trạng thái của ứng dụng. Thông thường, một model sẽ maps với một table trong cơ sở dữ liệu, những record trong table đó sẽ tượng trưng cho trạng thái của table đó. Còn một Controller sẽ handle những tương tác của người dùng với ứng dụng và cập nhật giá trị cho Model. Một View sẽ lấy những dữ liệu cần thiết của Model và hiển thị ra giao diện. ![cssbody=[boxHoverBody] cssheader=[boxHoverHeader] header=[Hình gì dây -,- ?] body=[Project Template cho ASP.NET Model View Controller Framework, các bạn có thể download nó ở các link tham khảo bên dưới] ASP.NET Model View Controller Framework Project Template](http://www.scottgu.com/blogposts/mvcsource/step1.png)
- ASP.NET MVC Framework tách rời các models, các views và các controllers của
[MVC](http://nthoai.blogspot.com/search/label/MVC)bẳng cách dùng các [Interface](http://en.wikipedia.org/wiki/Interface_%28computer_science%29)(trong ngôn ngữ lập trình), bằng cách đó giúp cho các thành phần này có thể test độc lập với nhau. View engine trong ASP.NET MVC framework chính là các trang aspx, ascx để hiển thị giao diện. Tuy nhiên, những tương tác của người dùng lên trang web sẽ được truyền thẳng cho controller mà không thông qua cơ chế postback truyền thống. Với ASP.NET MVC framework, chúng ta còn có thể làm được 1 trang web với Friendly-URL mà không phải mất công code những implement phức tạp như trước đây. [ASP.NET MVC Preview 3 Release](http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=aspnet&ReleaseId=13792)vừa mới được công bố hồi tháng 5/2008 với nhiều feature mới hứa hẹn nhiều điều hấp dẫn để tìm hiểu cho những lập trình viên như chúng ta.
Các bạn có thể tự tìm hiểu những resource về ASP.NET MVC Preview3 tại các link sau:
[http://www.codeplex.com](http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=aspnet&ReleaseId=13792) [http://www.asp.net](http://www.asp.net/mvc/default.aspx?wwwaspnetrdirset=1) [http://weblogs.asp.net/scottgu](http://weblogs.asp.net/scottgu/archive/2008/05/27/asp-net-mvc-preview-3-release.aspx)
##
Posted On Sunday, June 22, 2008 at
at
[MVC Model View Controller](http://nthoai.blogspot.com/2008/06/mvc-model-view-controller.html)
[3:22 PM](http://nthoai.blogspot.com/2008/06/mvc-model-view-controller.html)by Van Nguyen [](https://www.blogger.com/post-edit.g?blogID=3978293580246860892&postID=6262807952839744952&from=pencil)
- Mấy tuần nay tôi đang tìm hiều về các pattern thiết kế giao diện và đã gặp nhiều vướng mắc. Một số đã tự giải quyết được, một số vẫn còn tồn đọng. Vì vậy tôi cũng muốn chia sẽ những gì mình đã tìm hiểu với mọi người. Tôi quyết định dịch và viết bài từ mô hình ra đời lâu nhất và được nhiều người biết đến nhất, đó là mô hình MVC. Ban đầu tôi đã định không tìm hiểu về MVC và đi vào những thiết kế mới nhất như MVP nhưng thực ra MVC vẫn còn rất phổ biến hiện nay. (Cám ơn
[Tính nai oan oan](http://blog.360.yahoo.com/blog-ZDmbtn8lcqjB40guZjXo) cho các thông tin về MVC và [Monorail](http://www.castleproject.org/monorail/index.html)) Vì vậy, trong những loạt bài sau tôi sẽ viết nhiều về pattern đang phổ biến hiện nay như MVP và các ví dụ thực tế của nó. Phần lớn sẽ là bài dịch và sửa đổi cho dễ hiểu, hiện nay vẫn chưa đủ trình độ để sáng tạo cái gì cả.
- Có thể nói rằng các chương trình dù là Win Application hay Web Application đều gồm hai thành phần chính là giao diện và dữ liệu. Các ứng dụng chúng ta tạo ra sẽ đọc dữ liệu từ nơi lưu trữ và hiển thị lên cho người dùng thấy. Sau khi người sử dụng chương trình thao tác với ứng dụng và thay đổi giá trị dữ liệu, chương trình sẽ lưu các thay đổi đó xuống nơi lưu trữ. Do luồng thông tin chính của các ứng dụng sẽ truyền từ nơi lưu trữ lên trên phần hiển thị và ngược lại nên người có thể cho rằng nên có cách nào đó thiết kế hai thành phần dữ liệu và giao diện cùng với nhau để giảm thiểu việc coding và tăng performance. Dù không cố tình làm như vậy nhưng đa số những bạn mới viết chương trình cơ sở dữ liệu lần đầu tiên thường không biết nên sẽ làm theo cách này. Cách làm như vậy có một số vấn đề nghiêm trọng. Một trong các vấn đề đó là việc giao diện thường có xu hướng thay đổi nhiều hơn so với dữ liệu lưu trữ. Hơn nữa, những xử lý tính toán (business logic) trong chương trình cũng là một thành phần thường xuyên thay đổi trong suốt quá trình phát triển phần mềm. Nếu chương trình được xây dựng theo kiểu trộn lẫn code của các thành phần data access, business logic và presentation thì sẽ rất khó bảo trì sửa đổi cũng như khả năng sử dụng lại. Chính vì mục đích tăng tính độc lập giữa các thành phần trong ứng dụng và để giải quyết những trở ngại trên, người ta đã nghĩ ra nhiều mô hình và cách thiết kế ứng dụng rất hiệu quả. Kể từ những năm 70, mô hình MVC được nghĩ ra để giải quyết một số vấn đề trên.
Đặt vấn đề:
- Khi lần đầu tiên viết chương trình đọc dữ liệu từ database và hiển thị lên form, tôi đã viết chương trình kiểu gom chung phần xử lý giao diện và truy xuất dữ liệu làm một. Có nghĩa là tôi tạo ra câu query sql ngay trong code của lớp giao diện. Cách làm này rất không hợp lý vì khi sửa đổi cấu trúc bảng trong cơ sở dữ liệu thì câu query sql sẽ cần phải đổi, dẫn đến phải sửa lớp giao diện. Khi cần đổi database khác thì gần như phải viết lại từ đầu. Như vậy gom chung giữa giao diện và dữ liệu là không nên, và ai cũng biết điều đó.
- Liệu có một cách nào chúng ta có thể chia nhỏ chương trình thành nhiều module để tiện thay đổi, bảo trì?
Giả sử người ta có các yêu cầu sau:
- Giao diện của ứng dụng có xu hướng thay đổi nhiều hơn là những thay đổi business logic của chương trình, đặt biệt đối với những ứng dụng Web. Ví dụ như cùng một trang Web hiển thị sản phẩm có thể sẽ được yêu cầu thay đổi nhiều lần về cách bố trí sản phẩm, màu sắc bố cục trong khi cách để lấy thông tin sản phẩm từ database sẽ không cần sửa đổi. Hơn nữa, một trong những tiện lợi của ứng dụng Web là người ta có thể thay đổi giao diện vào bất cứ lúc nào mà không cần người dùng phải install cài đặt gì cả. Nếu như những đoạn code xử lý giao diện và xử lý business logic bên trong chương trình được viết chung với nhau, bạn sẽ phải thay đổi những lớp dùng để xử lý business logic mỗi khi cần thay đổi giao diện. Mà khi xử lý business logic của ứng dụng bị thay đổi thì có thể sẽ gây ra các lỗi không mong muốn nên phải test mọi thứ lại từ đầu cho dù đó chỉ là một thay đổi nhỏ về giao diện. Như vậy ta có một nhu cầu về việc tách riêng giữa giao diện và các xử lý business logic.
- Trong một số ứng dụng, chương trình sẽ hiển thị cùng một dữ liệu bằng nhiều cách khác nhau. Ví dụ như chúng ta cần làm một loạt các biểu đồ khác nhau hiển thị giá chứng khoán, các biểu đồ này được hiển thị cùng lúc. Nếu người dùng thay đổi dữ liệu trên một màn hình nào đó thì hệ thống phải cập nhật thay đổi đó trên các màn hình còn lại. Ta có một nhu cầu về tự cập nhật giao diện khi có những thay đổi trong dữ liệu.
- Để thiết kế giao diện HTML đẹp và hiệu quả cần những kĩ thuật đặt biệt, có khi cả năng khiếu về mĩ thuật mà không phải một lập trình viên nào cũng có được. Vì vậy trong những dự án lớn thường có những người design giao diện riêng và công việc của họ chỉ là thiết kế layout, còn lập trình viên sẽ thực hiện các xử lý business logic của ứng dụng. Do đó nhu cầu cho việc tách rời phần design giao diện và phần lập trình được đặt ra để tăng hiệu quả cho quá trình làm phần mềm.
- Có một yêu cầu khác được đặt ra như sau: những thao tác trên giao diện thông thường sẽ gồm có hai phần: hiển thị và cập nhật. Thành phần hiển thị sẽ lấy dữ liệu từ nơi lưu trữ, định dạng lại nếu cần thiết và hiển thị lên màn hình. Khi người sử dụng thực hiện một số thao tác, những gì thay đổi sẽ được thành phần cập nhật gọi thành phần xử lý business logic để cập nhật các thay đổi đó xuống nơi lưu trữ. Như vậy thành phần hiển thị sẽ tự nó thực hiện việc lấy thông tin, trong khi những thao tác của người dùng sẽ được xử lý bởi một thành phần khác.
- Trong các ứng dụng Web, khi bạn click vào một link trên 1 trang, một thao tác ứng với link đó sẽ được thực hiện đồng thời một trang mới sẽ được hiển thị. Trong nhiều trường hợp, trang web cần hiển thị sau cùng sẽ không liên quan trực tiếp đến thao tác được gọi khi click vào link ở trang trước. Ví dụ: trong những trang Web mua bán trực tuyến, khi muốn xem danh sách những món hàng mình muốn mua trước khi thanh toán, bạn sẽ click vào phần giỏ hàng. Một danh sách những món hàng sẽ hiện ra kèm với các link hoặc button xóa chúng khỏi giỏ hàng. Nếu bạn đổi ý và muốn bỏ đi một món nào đó thì bạn sẽ click vào link hoặc button tương ứng. Sau đó, giỏ hàng sẽ lại hiện ra với danh sách những món hàng mới mà không có món bạn vừa xóa. Vì vậy, ứng dụng phải hiển thị lại cùng 1 trang với cùng một danh sách nào đó sau khi thực hiện hai thao tác khác hẳn nhau trong cùng một HTTP request. Vậy có một yêu cầu là nhiều xử lý phức tạp sẽ được thực hiện trong cùng một request.
- Ngày nay, giao diện của một ứng dụng nên được độc lập với thiết bị. Nếu bạn muốn ứng dụng Web của mình có thể được hiển thị nhanh và đẹp trên các thiết bị di dộng thì bạn phải sửa đổi nhiều ở phần giao diện và chắc chắn là những business logic sẽ không cần thay đổi gì cả. Một sự tách biệt rõ ràng giữa hai thành phần này sẽ giúp bạn đạt được yêu cầu đó vài giảm thiểu những rủi ro khi phải thay đổi business logic do sai lầm khi thiết kế lúc đầu. Vậy dẫn đến yêu cầu về thiết kế ứng dụng để dễ dàng hỗ trợ nhiều dạng thiết bị khác nhau chứ không riêng gì máy tính.
- Và cuối cùng, để phần mềm của bạn có thể được test một cách toàn diện đôi khi không khả thi và rất mất thời gian. Hiện nay người ta có thể sử dụng Unit Test để test các lớp business logic nhanh chóng chính xác và tự động trong hầu hết trường hợp. Vì thế càng làm cho những xử lý tách rời khỏi phần giao diện sẽ giúp chương trình của bạn dễ viết code test hơn. Vậy yêu cầu thiết kế ứng dụng cho dễ test bằng code cũng được đặt ra.
MVC sẽ đạt được mọi yêu cầu trên:
- Mẫu thiết kế Model-View-Controlller (MVC) tách rời phần dữ liệu domain, module hiển thị và những xử lý thao tác của người dùng thành ba nhóm lớp (class) riêng biệt:
Model: là những gì liên quan đến dữ liệu của ứng dụng. Model sẽ chịu trách nhiệm thao tác trực tiếp với database như truy xuất, cập nhật, thêm mới. Model sẽ lấy thông tin và trả về cho View, nó cũng sẽ chịu trách nhiệm thông báo cho Controller những thay đổi dữ liệu nếu có. Bạn có thể xem Model bao gồm các lớp DAL (Data Access Layer) và các lớp
[Domain](http://en.wikipedia.org/wiki/Domain_model).
View: View sẽ chịu trách nhiệm hiển thị thông tin như tên của nó. Ta có thể xem View như các trang web, hoặc các form trong ứng dụng windows.
Controller: là những lớp sẽ lắng nghe những thao tác chuột và bàn phím từ người dùng, nó sẽ tác động đến Model và View để thay đổi khi cần thiết.
Hình dưới mô tả mối quan hệ giữa Model, View và Controller, Model sẽ không biết gì về View và
Controller.
![cssbody=[boxHoverBody] cssheader=[boxHoverHeader] header=[Hình gì dây -,- ?] body=[Quan hệ giữa Model View và Controlller, nguồn của MSDN] Model View Controller Class Structure](http://msdn.microsoft.com/en-us/library/ms978748.des_MVC_Fig01%28en-us,MSDN.10%29.gif)
Hình: MVC Class Structure
- Theo như hình trên thì ta thấy cả View và Controller đều phụ thuộc và có thể gọi đến Model. Tuy nhiên, Model lại hoàn toàn độc lập với View và Controller. Điều này là một trong những lợi ích chính của mô hình MVC khi tách rời các thành phần Model View và Controller. Sự độc lập của Model giúp chúng ta build và viết code test cho nó mà không ảnh hưởng hoặc phụ thuộc đến những lớp hiển thị. Ngoài ra, sự tách rời View và Controller ra hai nhóm lớp như trên là một thuận lợi thứ hai đối với những ứng dụng có nhiều người dùng. Ví dụ như trong một số cách làm, người ta có thể lập trình phần kiểm tra quyền (Role) ngay trong phần xử lý giao diện. Khi theo cách làm MVC, người ta sẽ phải tách riêng phần kiểm tra quyền ra khỏi phần hiển thị và nó hoàn toàn thuận lợi khi cần sửa đổi hoặc thêm những trang mới.
Những lợi ích về test khi áp dụng MVC
- Sự dễ dàng trong viết code test là một thuận lợi khi áp dụng MVC. Test những component của chương trình trở nên rất khó khăn khi chúng phụ thuộc chặt chẽ vào nhau, đặc biệt đối với những thành phần giao diện. Để test giao diện của một phần mềm, tất nhiên bạn phải qua các bước cài đặt và đôi khi điều đó trở nên rất mất thời gian khi chỉ để test một chức năng đơn giản. Tệ hơn khi xảy ra lỗi, chúng ta sẽ rất khó để phát hiện lỗi ở phần nào. Đó là lý do tại sao chia nhỏ các thành phần chức năng là một trong những chiều hướng chính của các thiết kế quan trọng. MVC chia nhỏ các vấn đề như lưu trữ, hiển thị và cập nhật dữ liệu thành 3 nhóm components, những component này có thể được test độc lập với nhau.
- Ngoài vấn đề về sự phụ thuộc, giao diện của phần mềm cũng rất phức tạp khi muốn test. Người ta thường sử dụng người thật để test giao diện, hoặc sẽ phải viết những script test để giả lập những thao tác của con người. Để viết những script này thường rất mất thời gian và phức tạp. MVC KHÔNG giải quyết được vấn đề về test giao diện, NHƯNG nó tách rời phần dữ liệu Model ra khỏi những xử lý hiển thị và cho phép MODEL có thể được test độc lập với phần hiển thị và điều đó sẽ giảm thiểu những test case liên quan đến giao diện.
Ý kiến của Nguyễn Thoại:
- Tôi đã không dịch và đưa vào những dạng biến đổi của mẫu MVC vào bài này vì không muốn các bạn cảm thấy rối thêm, cũng không đưa vào những lợi ích và giới hạn của MVC. Lợi ích thì tất nhiên đã được đề cập tới ở trên nên cũng không cần tổng kết lại làm gì, còn giới hạn chính là tính phức tạp. Cũng như những bài viết trước, các Pattern luôn phức tạp nhưng khi chịu khó một chút thì về sau sẽ được những lợi ích lớn.
- Các bạn có thể đặt câu hỏi: áp dụng MVC vô ASP.NET như thế nào. Có ví dụ code sample nào không. Xin thưa là có trang ví dụ ở
[đây](http://msdn.microsoft.com/en-us/library/ms998540.aspx), nhưng cá nhân tôi vẫn còn nghi ngờ tính đúng đắn của nó. Sắp tới, tôi sẽ viết thêm một số bài nữa liên quan đến việc áp dụng MVC trong.NET để tìm hiểu những vấn đề tôi còn nghi ngờ. Trong bài viết này không có ví dụ vì tôi sẽ dành phần code sample cho các bài sau. Hi vọng qua bài dịch này các bạn có được khái niệm MVC là cái gì, và lợi ích của nó như thế nào và khoan hãy nghĩ đến cách áp dụng. Cũng giống như những pattern khác (ở các bài viết sau), MVC được nghĩ ra với mục đích tách rời các thành phần quan trọng trong ứng dụng để tăng tính dễ bảo trì, dễ test tự động và khả năng sử dụng lại. Cùng một mục đích như vậy nhưng các mẫu pattern khác như MVP sẽ có cách thực hiện và cách cài đặt khác. ![50 :bbpraroi:](http://igame.vn/f/images/smilies/BBP_smilies/50.gif)
Liệu mô hình ASP.NET của Microsoft với các trang aspx và code behind tách rời có phải là một implement MVC? Ở bài
[sau](http://nthoai.blogspot.com/2008/06/aspnet-va-mvc-framework.html)tôi sẽ trả lời câu hỏi đó và giới thiệu khái quát về một framework MVC Framework cho ASP.NET.
##
Posted On Friday, June 13, 2008 at
at
[Phỏng vấn 2 mẫu thiết kế Abstract Factory và Factory Pattern](http://nthoai.blogspot.com/2008/06/abstract-factory-and-factory-method.html)
[6:01 PM](http://nthoai.blogspot.com/2008/06/abstract-factory-and-factory-method.html)by Van Nguyen [](https://www.blogger.com/post-edit.g?blogID=3978293580246860892&postID=3735657099004199699&from=pencil)
Nguyễn Thoại: Chà chà, chào hai anh, đây là lần đầu tiên blog của iem phỏng vấn hai anh, hai anh cảm thấy thế nào.
Factory Method: Tôi ko biết sao hay bị gộp chúng với cha Abstract Factory. Đều là factory pattern không có nghĩa chúng tôi không được có những buổi phỏng vấn riêng.
![4 :bbpcaycu:](http://igame.vn/f/images/smilies/BBP_smilies/4.gif)
Nguyễn Thoại: Ấy ấy, đừng tự ái, em muốn phỏng vấn cả hai anh cùng nhau để giúp đọc giả phân biệt được ai là ai. Hai anh có nhiều điểm giống nhau, và em có nghe vài phàn nàn rằng người ta thỉnh thoảng bị rối và không thể phân biệt được 2 người.
Abstract Factory: Ừ đúng đấy, đã có lúc tôi bị nhầm lẫn là cha Factory Method, và tôi biết ổng cũng bị giống như tôi. Hai tụi tôi đều giỏi trong việc giảm sự phụ thuộc giữa chương trình với những cài đặt cụ thể; nhưng mỗi người chúng tôi lại có những cách làm riêng nên thỉnh thoảng dân lập trình lại cảm thấy rối và không thể xác định được phải dùng cách nào.
![17 :bbpcuoi3:](http://igame.vn/f/images/smilies/BBP_smilies/17.gif)
Factory Method: Ấy, người ta vẫn phân biệt được tôi mà. Nói chung, tôi dùng các lớp để tạo ra products, còn cha dùng những đối tượng; hai cách đó hoàn toàn khác nhau nhé.
Nguyễn Thoại: Ừ em có tìm hiểu về hai anh rồi mà vẫn còn rối đây này, anh có thể nói thêm về khoản này không, anh Factory Method?
![Big Smile :big_smile:](http://igame.vn/f/images/smilies/popo/big_smile.gif)
Factory Method: Ok, Cả cha Abstract Factory và tôi đều tạo ra các products, các objects, đó là việc chúng tôi phải làm. Nhưng tôi làm nhờ vào sự kế thừa (inheritance) …
Abstract Factory: … còn tôi làm nhờ vào sự kết hợp các đối tượng.
Factory Method: Đúng thía, nghĩa là nếu muốn tạo ra các đối tượng bằng cách Factory Method, người ta cần phải extend một lớp và override lại hàm tạo “factory method”.
Nguyễn Thoại: …rồi factory method sẽ làm cái gì?
Factory Method: Tất nhiên là tạo ra 1 object roài, anh đã từng viết bài về tôi mà giờ còn hỏi hả. Ý tưởng của tôi, Factory Method Pattern, là sẽ sử dụng các lớp con để sinh ra 1 đối tượng mong muốn. Bằng cách đó, người dùng sẽ chỉ cần biết đến lớp trừu tượng như gia cầm, và các lớp con cụ thể sẽ lo về các kiểu gà, kiểu vịt, kiểu ngan. Vì vậy, nói theo cách khác, tôi giúp chương trình độc lập với các kiểu (type) cụ thể đó.
![29 :bbpskien:](http://igame.vn/f/images/smilies/BBP_smilies/29.gif)
Abstract Factory: Ý tưởng của tôi cũng giống giống vậy đó, nhưng chỉ là làm theo một cách khác…
Nguyễn Thoại: Tiếp đi anh Abstract Factory … vừa rồi anh có đề cập đến cách kết hợp các đối tượng?
Abstract Factory: Ờ,cách của tôi thế này: Tôi tạo ra một kiểu trừu tượng (
[abstract type](javascript:void();)) để dùng vào việc tạo ra một nhóm những products khác. Khi đó, những lớp con của kiểu trừu tượng sẽ xác định cách tạo ra các products này. Để áp dụng được ý tưởng của tôi, bạn phải tạo ra một instance của một trong các lớp con trên (instance này là 1 factory) và đưa nó vào chỗ cần thiết trong code. Vì thế, giống như Factory Method, những nơi sử dụng factory của tôi sẽ hoàn toàn độc lập với những produtcts cụ thể.
Nguyễn Thoại: Oh yè, tôi biết rồi, một lợi ích nữa của cách này là anh đã nhóm các products tương tự nhau lại, có đúng không?
Abstract Factory: Đúng roài cưng à.
![3 :bbpchao:](http://igame.vn/f/images/smilies/BBP_smilies/3.gif)
Nguyễn Thoại: Bây giờ người ta cần bổ sung thêm một product nữa vô nhóm các products mà anh có thể tạo ra. Vậy không cần phải thay đổi gì hết huh?
Abstract Factory: Hèm, trường hợp này thì tôi phải thay đổi chút ít, nhiều người không thích lắm ở điểm này.
Factory Method: hĩ hĩ
![17 :bbpcuoi3:](http://igame.vn/f/images/smilies/BBP_smilies/17.gif)
Abstract Factory: Cười gì cha nội?
![31 :bbpbuon:](http://igame.vn/f/images/smilies/BBP_smilies/31.gif)
Factory Method: Cười chứ sao ko cười, làm vậy quá mất công chứ gì nữa. Cha thay đổi có nghĩa là người dùng phải đi mà đổi tất cả các lớp con roài? (các lớp con ở đây là các factories)
Abstract Factory: Đúng, nhưng cần phải làm như vậy vì tôi có khả năng tạo ra nhiều kiểu product khác nhau, trong khi người ta xài cách của anh khi họ cần tạo ra một kiểu product nào đó thôi, vì thế anh không có cồng kềnh như tôi, anh chỉ cần một method duy nhất.
![23 :bbpnodo:](http://igame.vn/f/images/smilies/BBP_smilies/23.gif)
Nguyễn Thoại: Anh Abstract Factory bớt nóng, tôi nghe đồn rằng anh thường sử dụng nhiều hàm factory method theo cách của anh Factory Method để tạo các đổi tượng bên trong những factories của anh, điều đó có đúng ko?
Abstract Factory: Đúng đó em, anh thừa nhận điêu này. Những lớp factory con thường dùng các factory method để tạo các products tương ứng. Trong trường hợp này, các factory method được dùng thuần túy để tạo ra các products.
Factory Method: … còn tôi dùng hàm factory method để tạo ra product cụ thể mà người ta muốn, người dùng sẽ không biết cái gì được tạo ra, họ chỉ cần gọi hàm.
Nguyễn Thoại: Dường như hai anh làm rất tốt công việc của mình. Tôi chắc rằng đọc giả đã có được lựa chọn của mình. Sau cùng, những factories của 2 anh quả thật rất hữu ích, đọc giả của tôi sẽ sử dụng chúng trong các tình huống thích hợp nhất. Các anh đều đóng gói (encapsulate) quá trình tạo ra đối tượng để giúp chương trình độc lập và giảm phụ thuộc với những kiểu cụ thể, việc làm này thật đáng tuyên dương. Cám ơn hai anh, hai anh có lời gì trước khi chào tạm biệt đọc giả không ạ?
![09 :bbpbtay:](http://igame.vn/f/images/smilies/BBP_smilies/09.gif)
Abstract Factory: Cám ơn. Hãy nhớ đến tôi, Abstract Factory, và sử dụng tôi bất cứ khi nào bạn cần cùng một lúc
[tạo ra nhiều loại products](javascript:void();), và khi bạn muốn chắc chắn những nơi sử dụng sẽ không cần biết đến những lớp cụ thể khi cần làm việc này. ![29 :bbpskien:](http://igame.vn/f/images/smilies/BBP_smilies/29.gif)
Factory Method: Còn tôi là Factory Method, hãy sử dụng tôi để làm cho chương trình của bạn độc lập với những lớp cụ thể mà bạn cần
[tạo 1 đối tượng](javascript:void();), hoặc khi bạn không biết sau này sẽ cần đến những lớp con nào nữa. Khi cần sử dụng tôi, hãy tạo tạo ra subclass (1 factory implement 1 kiểu abstract) và implement factory method cho chính bạn. ![50 :bbpraroi:](http://igame.vn/f/images/smilies/BBP_smilies/50.gif)
(Page 158-162 of Head First – Design Pattern)
##
Posted On Monday, June 9, 2008 at
at
[10 điều bạn sẽ phải chấp nhận nếu làm việc trong ngành IT](http://nthoai.blogspot.com/2008/06/10dieu-toi-te-khi-lam-nganh-it.html)
[10:25 PM](http://nthoai.blogspot.com/2008/06/10dieu-toi-te-khi-lam-nganh-it.html)by Van Nguyen [](https://www.blogger.com/post-edit.g?blogID=3978293580246860892&postID=8263160920864936674&from=pencil)
1/Ở những ngành khác thì nữ vừa nhiều vừa xinh đẹp, ngành IT thì ngược lại.
- Điều này thì tự ai đã và đang học CNTT ở các trường ĐH thì biết rồi. Không riêng gì trong ngành CNTT mà trong những ngành kĩ thuật thì số lượng nữ giới cũng rất thấp. Tuy nhiên so với các ngành như Cơ Khí, Điện Tử thì tỉ lệ nữ giới học CNTT cũng còn khá cao. Nhưng khi học xong và đi làm thì tỉ lệ nữ giới làm lập trình lại càng giảm, đa số các bạn âý làm QC, DB, BA, … .Ở nhóm tôi khoảng 20 người chỉ có mỗi 2 dev, 2 QC là nữ, còn lại toàn đực rựa. Tuy nhiên cũng an ủi là trong cty vẫn có nhiều chị em xinh lắm hĩ hĩ nhưng không làm ở bộ phận lập trình. Thiếu thốn này thường dẫn đến điều thứ 2.
2/Xác suất phải lập gia đình với người cùng ngành rất cao.
- Nghe có vẽ như hơi mâu thuẫn, đã ít nữ thì làm sao xác suât này cao được. Thế nhưng những người làm IT thì kể từ lúc đi làm thường nhìn máy tính nhiều hơn giao tiếp với ngưòi thật nên sẽ ăn nói kém, giao tiếp kém, cơ hội gặp những phụ nữ khác ngành cũng ít hơn những người làm ở ngành khác nên trời kiu ai nấy dzạ
. Tuy nhiên chúng ta thường quen nửa cuộc đời của mình từ trong trường ĐH hoặc ở nơi làm việc nên điều này có thể cũng đúng với những người làm ở các ngành khác. Dù những người làm ở ngành IT chúng ta thường được cái thông minh, nhưng 2 người thông minh thì sinh con ra chưa chắc thông minh nên đây cũng là một hiểm họa tiềm tàng. Hơn nữa, 2 người cùng ngành IT giờ gặp nhau ngoài nói chuyện bug, code thì chán chết. Phải chi chàng kể chuyện bug, nàng hỏi bug là gì huh anh thì có thú vị ko nhẩy
3/Bạn sẽ bị yếu đi.
- Điều này không có gì phải bàn cãi. Thứ nhất ngồi nhiều … thì bụng và mông sẽ to. Bụng càng to càng khó làm... nhiều thứ và tuổi thọ giảm. Ngồi nhiều thì còn có thể gây ra nhiều bệnh tế nhị khác. Ngoài 2 cái bệnh đằng trước và đằng sau thì còn bệnh ở mắt do nhìn quá nhiều. Đa số người làm IT xung quanh ta đều bị cận thị. Gõ máy tính thường xuyên sẽ ảnh hưởng đến tim, rê chuột thường xuyên sẽ thoái hóa cổ tay. Ngoài ra cột sống sẽ bị chai hoặc mọc gai do cái tật ngồi nhiều hơn đứng của công việc này. Ngoài ra, những ngưòi làm IT thường có thói quen làm việc, sinh hoạt ban đêm. Cái giờ đáng lẽ những người trong những ngành khác làm cái việc mà ai cũng biết là việc gì đấy thì người trong ngành IT lại gõ gõ, click click và nó thường gây ra bệnh đau bao tử. Tay chân ít hoạt động nên con người thường cảm thấy mỏi mệt, lười vận động, thậm chí cả lười tắm nên đừng thắc mắc tại sao một số SV ở ngành IT thường hay ở dơ. Nói chung làm cái nghề này nếu ko chịu sinh hoạt … điều độ thì đừng mong thọ.
4/Bạn sẽ thường xuyên bị làm phiền bởi người quen.
- Đây là một trong những điều tệ hại và khó chịu nhất mà bạn sẽ gặp phải. Những người quen của bạn, bạn bè, bà con, cô dì chú bác, bạn của ba của mẹ sẽ gọi điện nhờ bạn giúp khi họ không nghe nhạc được, máy khởi động chậm, không thấy webcam, không biết đưa hình lên blog. Kiểu hỗ trợ kĩ thuật miễn phí này bạn nên cẩn thận vì nó sẽ thường xuyên lặp đi lặp lại. Một số trường hợp bạn sẽ được trả công nhưng theo tôi bạn chẳng cần số tiền chả đáng đổ xăng đó làm gì so với thời gian bạn phải chạy đi chạy lại. Đa số những người nhờ bạn giúp sẽ mong muốn được hỗ trợ miễn phí và tôi chắc chúng ta sẽ không vui gì về điều đó. Vì vậy hãy tập nói không khi có thể.
5/Bạn sẽ phải thường xuyên về trễ mà không được trả tiền.
- Đặc thù của ngành IT là công việc thường không thể tính chính xác bằng giờ. Có nghĩa là không phải cứ 1 lượng thời gian nào đó thì sẽ làm xong một công việc. Thuờng thì chúng ta sẽ phải ở lại thêm 1h, 2h để làm nốt công việc của mình nếu bạn là người có trách nhiệm. Nhưng dù có trách nhiệm hay không thì khi công việc chưa xong mà đã gần đến deadline thì bạn vẫn phải ở lại để hoàn thành những gì còn dở dang, và tất nhiên không có xu nào cả.
6/Bạn sẽ thường xuyên bị stress.
- Khi làm việc với những project lớn nhiều người, công việc sẽ theo flow rõ ràng, bạn làm ngưòi khác test, manager dí, và khi đến những ngày cuối cùng là lúc bạn làm việc nhiều nhất. Phải suy nghĩ nhiều, cơ thể mệt mỏi thiếu ngủ cộng với căng thẳng khi làm việc sẽ khiến nhiều người bị stress. Theo một số điều tra thì thủ phạm gây stress nhiều nhất là email. Khi phải đọc khoảng 100 email một ngày thì người hiền lành cũng trở nên gắt gỏng. Bởi vậy những người làm IT thường hay khó chịu đột xuất.
![cssbody=[boxHoverBody] cssheader=[boxHoverHeader] header=[Hình gì đây :D?] body=[Đây là hình minh họa về Lập Trình Viên khi thất nghiệp] 10 điều tồi tệ khi làm trong ngành CNTT](http://img241.imageshack.us/img241/1006/code4foodwz5.jpg)
7/Lương bạn sẽ tăng rất chậm.
- Làm IT lương khởi điểm sẽ khá cao so với một số ngành nhưng tốc độ tăng sẽ chậm và ít đột biến. Thường thì những người làm IT sẽ giải quyết nhu cầu tăng lương bằng cách nhảy sang công ty khác. Cho nên những bạn sinh viên mới ra trường nên tìm một công ty có lương khởi điểm khá tốt vì thông thường chu kì tăng lương sẽ là từng năm và khi lạm phát 2 chữ số mà tăng lương dưới 15% + với trả lương bằng tiền Việt thì hơi bị đuối. Tốt nhất nên tìm hiểu những anh chị đi trước hoặc xác định mục tiêu của mình để tìm hướng đi khác vì làm lập trình chay khó làm giàu lắm.
![17 :bbpcuoi3:](http://igame.vn/f/images/smilies/BBP_smilies/17.gif)
8/Không phải lúc nào cũng được làm công việc ưa thích.
- Bạn từng nghĩ sẽ áp dụng những kĩ thuật tiên tiến nhất của các ngôn ngữ lập trình hiện đại, sẽ học hỏi những công nghệ mới nhất và làm việc với những chuyên gia đầy kinh nghiệm trong lĩnh vực CNTT nhưng thường thì không phải như vậy. Ở những công ty càng lớn thì sẽ càng có những project kì lạ kiểu như chuyển nguyên một chương trình từ VB6 sang C#, hoặc từ một ngôn ngữ rất cổ xưa sang C#. Tuy đòi hỏi kiến thức lập trình trên 2 ngôn ngữ, khả năng đọc hiểu code nhưng nói chung công việc như vậy khá nhàm chán và tôi nghĩ chẳng ai muốn theo đuổi lâu dài. Đôí vơí những project lớn thì chi phí cho công nghệ mới là một trong những vấn đề quan tâm của khác hàng. Bạn muốn sử dụng SQL 2005 nhưng khách hàng sẽ nói “No” khi họ đã có licence cho SQL 2000 và không muốn bỏ tiền mua thứ mới. Bạn muốn sử dụng ASP.NET để làm website cho khách hàng nhưng họ cho rằng PHP sẽ rẻ hơn vì không tốn nhiều licence cho máy chủ WINDOWS. Bạn muốn dùng
[ORM tool](http://nthoai.blogspot.com/search/label/ORM)để tiết kiệm thời gian lập trình nhưng khách hàng nhất quyết bạn phải dùng Store Procedure và viết code gọi bằng C# vì làm vậy nhanh hơn 30 milisecond khi gọi 10000 query. Nói chung khách hàng là thượng đế và chúng ta phải nghe theo. ![39 :bbpcuoi5:](http://igame.vn/f/images/smilies/BBP_smilies/39.gif)
9/Khi nhảy việc cũng không đơn giản, có khi phải bắt đầu lại từ đầu.
- Lương bạn hiện không cao trong khi lương tụi bạn đã gấp 2 mình. Đề nghị xếp tăng lương thì sao, liệu xếp có chịu tăng cho mình gấp rưỡi không chứ đừng nói gấp 2. Tại sao không nhảy việc khi vừa có thể có lương cao hơn lại có thể học hỏi nhiều cái mới và làm quen với nhiều con người mới. Nhưng khi nhảy việc là lúc bạn phải chấp nhận làm lại từ đầu. Có thể bạn có nhiều kinh nghiệm từ công ty cũ nhưng sang môi trường mới sẽ không có đất để dụng võ. Và khi chưa biết gì hết thì bạn sẽ là một newbie và chấp nhận làm lại từ con số không. Vì vậy theo tôi nếu tìm được một công việc mới lương gấp rưỡi trở lên thì hãy nhảy, còn không ở lại cho lành và chờ thời cơ.
![50 :bbpraroi:](http://igame.vn/f/images/smilies/BBP_smilies/50.gif)
![cssbody=[boxHoverBody] cssheader=[boxHoverHeader] header=[Hình gì đây -,- ?] body=[Lập trình viên muốn làm giàu không dễ chút nào] 10 điều tồi tệ khi làm trong ngành CNTT](http://img156.imageshack.us/img156/5187/moneyox6.jpg)
10/Rất khó để tự kinh doanh riêng về IT
- Tỉ lệ thất bại cao của các công ty IT mới thành lập đã nói lên điều này. Nếu bạn làm IT khi muốn mở một công ty làm phần mềm thì rất khó. Một trong những khó khăn lớn nhất là sự cạnh tranh. Bạn sẽ khó mà kiếm được project từ những khách hàng lớn khi công ty của bạn chưa hề có tên tuổi hoặc không có công ty mẹ đỡ đầu. Nếu chấp nhận làm dự án nhỏ thì có vô khối công ty đã làm như vậy. Những công ty may mắn sống sót nhờ vào dạng những project nhỏ này họ có thể thực hiện website trong vòng một tuần nhờ tái sử dụng những cái đã có từ project cũ và chúng ta sẽ khó mà cạnh tranh nỗi khi kinh nghiệm tổ chức và kinh doành là con số 0. Giỏi lập trình không có nghĩa là giỏi quản lý và càng không có nghĩa là giỏi kinh doanh nên làm công ty về IT không hề đơn giản. Và khi không có một project nào trong khi phải nuôi đội quân cỡ 5 người, cộng với trả tiền điện, tiền mặt bằng trong vòng 3 tháng là bạn phải nghĩ đến chuyện giải tán.
![3 :bbpchao:](http://igame.vn/f/images/smilies/BBP_smilies/3.gif)
- Đó là 10 trong khá nhiều những khó khăn, thiệt thòi, gian khổ của ngành IT. Làm IT không đơn giản và không sướng chút nào, càng không dễ làm giàu. Thế nên những ai nghĩ rằng làm IT sướng và lương cao thì nên xem lại và cân nhắc nêú như đang chọn nghề cho mình. Đây là những ý kiến chủ quan của tôi, có thể có nhiều ý kiến trái ngược và bổ sung khác cho nên rất mong được sự chia sẽ từ các bạn. Mọi comment khen ngợi, chửi bới đều hoan nghênh và vui lòng post trực tiếp ở entry này hoặc ở
[link này](http://www.blogger.com/comment.g?blogID=3978293580246860892&postID=8263160920864936674). ![Byebye :byebye:](http://igame.vn/f/images/smilies/popo/byebye.gif)
##
Posted On Friday, June 6, 2008 at
at
[Sử dụng Adapter Pattern Trong Lập Trình Hướng Đối Tượng](http://nthoai.blogspot.com/2008/06/su-dung-adapter-pattern-trong-lap-trinh.html)
[4:57 PM](http://nthoai.blogspot.com/2008/06/su-dung-adapter-pattern-trong-lap-trinh.html)by Van Nguyen [](https://www.blogger.com/post-edit.g?blogID=3978293580246860892&postID=8757846962963344299&from=pencil) ![cssbody=[boxHoverBody] cssheader=[boxHoverHeader] header=[Hình gì đây :D?] body=[Đây là hình minh họa về Adapter trong đời sống] Adapter Pattern Samble In Real Life](http://img524.imageshack.us/img524/5052/dcadaptervv1.jpg)
I/ Giới thiệu.
- Khái niệm Adapter đã xuất hiện từ rất lâu và được sử dụng rất nhiều trong cuộc sống. Thiết bị điện tử của bạn không thể sạc pin bằng điện 220V mà phải thông qua một bộ chuyển, biến điện 220 thành 12V. Bạn có một con chuột với Jack cắm USB nhưng máy đã hết chỗ cắm, người bán tặng bạn thêm 1 bộ chuyển từ USB sang PS2 để giải quyết vấn đề trên…Đó là những ví dụ hay gặp nhất về Adapter, và vì chúng quá thông dụng nên ít ai ngờ đến cái mình đang sử dụng hằng ngày lại là một kiểu adapter nào đó. Từ lâu, khái niệm Adapter đã được 4 đại ca về Design Pattern đưa vào lĩnh vực làm phần mềm và nó tỏ ra có ích không kém. Tôi dám chắc là các bạn ai đều cũng từng sử dụng đến Adapter trong cuộc sống của mình, thế thì tại sao lại không sử dụng nó trong lập trình để giải quyết những vấn đề tương tự
![29 :bbpskien:](http://igame.vn/f/images/smilies/BBP_smilies/29.gif)
![cssbody=[boxHoverBody] cssheader=[boxHoverHeader] header=[Hình gì đây :D?] body=[Đây là hình minh họa về Adapter trong đời sống] Adapter Pattern Samble In Real Life](http://img524.imageshack.us/img524/2869/audiojack2si7.png)
![cssbody=[boxHoverBody] cssheader=[boxHoverHeader] header=[Hình gì đây :D?] body=[Đây là hình minh họa về Adapter trong đời sống] Adapter Pattern Samble In Real Life](http://img524.imageshack.us/img524/4638/audiojackwf4.jpg)
![cssbody=[boxHoverBody] cssheader=[boxHoverHeader] header=[Hình gì đây :D?] body=[Đây là hình minh họa về Adapter trong đời sống] Adapter Pattern Samble In Real Life](http://img524.imageshack.us/img524/254/powerjackip0.gif)
![cssbody=[boxHoverBody] cssheader=[boxHoverHeader] header=[Hình gì đây :D?] body=[Đây là hình minh họa về Adapter trong đời sống] Adapter Pattern Samble In Real Life](http://img524.imageshack.us/img524/4989/usbjacklf1.jpg)
-
[Inheritance](http://en.wikipedia.org/wiki/Inheritance_%28computer_science%29)là một trong 3 nguyên tắc cơ bản của lập trình hướng đối tượng. Khi cần xây dựng một lớp dựa trên một hoặc nhiều lớp hay interface có sẵn bạn chỉ cần khai báo lớp mới kế thừa lớp cũ và có thể viết thêm những method, attribute của mình tùy thích. Tuy nhiên sẽ có lúc tính kế thừa của OOP sẽ không sử dụng được. Thật sự là có nhiều trường hợp như vậy mà tôi đã từng gặp phải. Giả sử bạn cần mở rộng một lớp nhưng lớp đó là lớp seal (không cho kế thừa) thì inheritance chắc chắn không sử dụng được rồi. Một ví dụ khác là khi bạn cần kết hợp nhiều thứ có sẵn để làm ra một lớp mới sử dụng lại những thứ đó. Như các bạn biết C# và Java không hỗ trợ đa kế thừa, chúng ta không thể nào kế thừa từ 2 lớp có sẵn được. Như vậy nếu bạn đã có một lớp để tìm ước số chung lớn nhất của hai số tự nhiên, một lớp để cộng hai phân số, và khi dùng adapter để kết hợp hai thứ có sẵn đó bạn sẽ làm được một lớp có khả năng cộng hai phân số với nhau với kết quả phép cộng là phân số đã tối giản. ![08 :bbpnen:](http://igame.vn/f/images/smilies/BBP_smilies/08.gif)
- Như vậy, Adapter Pattern là một design pattern, nó còn được gọi là Wrapper Pattern biến đổi một lớp không thể sử dụng trực tiếp được thành một lớp mới có thể sử dụng. Trong một số trường hợp, Adapter Pattern còn được sử dụng để biến đổi dạng dữ liệu. Để tiết kiệm chỗ trong và giảm tính phức tạp trong database, nhiều giá trị string có thể được lưu thành một string duy nhất với kí tự phân cách đặc biệt, mẫu Adapter sẽ chịu trách nhiệm tách các string đó ra thành array để nơi khác có thể sử dụng. Nhưng nói chung Adapter Pattern được sử dụng đúng nhất khi biến cái không thể thành cái có thể.
![50 :bbpraroi:](http://igame.vn/f/images/smilies/BBP_smilies/50.gif)
II/ Sử dụng Adapter Pattern như thế nào?
- Theo tôi nói ở trên, Adapter Pattern thường được dùng để biến cái không thể thành cái có thể, biến lớp không thể sử dụng thành một lớp mới có thể sử dụng. Tuy nhiên, Adapter Pattern còn được dùng để biến những lớp có sẵn thành một thứ khác dễ và tiện sử dụng hơn. Vì vậy có hai cách thiết kế và áp dụng Adapter Pattern trong lập trình, ở một số tài liệu Design Pattern, hai cách này được gọi là Object Adapter Pattern và Class Adapter Pattern. Một số trang còn gọi là Inheritance-Way và Composition-Way. Nói chung những cách gọi này đều dựa trên cách thiết kế lớp Adapter. Object Adapter Pattern hay Composition-Way là cách sử dụng một đối tượng thuộc về lớp chúng ta muốn biến đổi bên trong lớp Adapter. Trong khi đó, ClassAdapterPattern hay Inheritance-Way là cách kế thừa từ lớp chúng ta muốn biến đổi hoặc mở rộng thêm.
III/ Ví dụ mẫu về Adapter Pattern
- Tôi sẽ lần lượt đưa 2 ví dụ thiết kế lớp về 2 cách này:
A. Object Adapter Pattern (Composition-Way)
- Để kiếm đủ tiền ăn nhậu, massage
![19 :bbpxtay:](http://igame.vn/f/images/smilies/BBP_smilies/19.gif)
![17 :bbpcuoi3:](http://igame.vn/f/images/smilies/BBP_smilies/17.gif)
B. Class Adapter Pattern (Inheritance-Way)
- Tôi đã rất mừng khi phát hiện ra rằng chỉ mất chút ít thời gian để làm cái BarChart. Nhưng khi đưa cho khách hàng, họ yêu cầu tôi phải sửa lại cái BarChart, phải cho người dùng thấy được số liệu khi rê chuột lên hình. Đúng là đồ free có khác, không khi nào dùng ngay được. Tôi đành phải thiết kế lại lớp ThoaiChart theo hướng khác. Bây giờ tôi sẽ inherit lớp CloseSourceCode.BarChart và override lại hàm hover chuột của nó. Thiết kế lớp như sau:
IV/ So sánh Adapter Pattern với các Design Patterns khác?
- Trong các Design Pattern thuộc nhóm
[Structural Design Pattern](http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29#Classification), có rất nhiều mẫu có thiết kế lớp tương tự nhau. Chúng ta nên nắm rõ ý nghĩa và trường hợp sử dụng của chúng để không nhầm lẫn và … để khi em trai em gái nó hỏi còn biết đường trả lời ![31 :bbpbuon:](http://igame.vn/f/images/smilies/BBP_smilies/31.gif)
• Với khả năng biến cái không thể thành có thể, Adapter Pattern làm cho 1 lớp có thể sử dụng được sau khi lớp đó đã được thiết kế xong trong khi
[Bridge Pattern](http://nthoai.blogspot.com/search/label/Bridge%20Pattern)làm điều đó trước khi lớp này được tạo ra.
•
[Bridge Pattern](http://nthoai.blogspot.com/search/label/Bridge%20Pattern)được nghĩ ra với ý tưởng tách rời những abstraction ra khỏi những implementation, và tạo tính độc lập cao giữa chúng. Trong khi đó, Adapter pattern đươc dùng để làm những lớp không liên quan (không cùng namespace, khác interface) có thể làm việc với nhau.
• Adapter Pattern về ý nghĩa sẽ biến đổi interface của một lớp, Proxy Pattern sẽ không đổi interface của một lớp và Decorator Pattern sẽ kế thừa và mở rộng dựa trên interface đó.
• Adapter Pattern khi dùng sẽ thay đổi interface của một đối tượng có sẵn để biến nó thành thứ có thể dùng được. Decorator Pattern sẽ phát triển thêm trên một đối tượng mà không làm thay đổi interface của nó
• Giống với Adapter Pattern, Façade Pattern có thể kết hợp nhiều xử lý vào một lớp mới đơn giản và gọn hơn , nhưng nó sẽ định nghĩa mới 1 interface trong khi Adapter Pattern tái sử dụng một interface (Trong ví dụ về các biểu đồ ở trên thì interface được tái sử dụng là IMyChart, không hề có một interface mới được tạo ra)
- Các bạn có thể tham khảo thêm những ví dụ code mẫu cho Adapter Pattern ở trang
[wiki](http://en.wikipedia.org/wiki/Wrapper_pattern). Ví dụ thứ hai ở trang này là biến đổi 1 lớp DList thành Stack dựa trên những xử lý có sẵn của DList mà không cần viết lại những xử lý phức tạp cho lớp Stack.
Tài liệu tham khảo:

Server: GSE

Cache-Control: private, max-age=0


markdown:
-
[1002 - Beauty and th..>]25-Jun-2008 00:17 95k
[1004 - Bony Tyler - ..>]24-Jun-2008 23:25 548k
[1008 - Elton John - ..>]24-Jun-2008 23:25 121k
[1009 - Jewel - hands..>]24-Jun-2008 23:25 98k
[101 - Boom Boom Boom..>]24-Jun-2008 23:25 85k
[1010 - JIM BRICKMAN ..>]24-Jun-2008 23:25 206k
[1012 - Orange Blue -..>]24-Jun-2008 23:25 189k
[1013 - Robbie Willia..>]24-Jun-2008 23:25 143k
[1017 - Air Supply - ..>]24-Jun-2008 23:25 113k
[1018 - Anakin Theme,..>]24-Jun-2008 23:25 128k
[1019 - Celine Dion -..>]24-Jun-2008 23:26 586k
[1023 - Enrique Igles..>]24-Jun-2008 23:26 528k
[1025 - Gloria Gaynor..>]24-Jun-2008 23:26 205k
[1027 - Joe_Cocker_-_..>]24-Jun-2008 23:26 276k
[103 - Glenn Medeiros..>]24-Jun-2008 23:26 735k
[1030 - Madonna - Ray..>]24-Jun-2008 23:26 507k
[1031 - Moby - Why do..>]24-Jun-2008 23:26 230k
[1034 - sk8er_boi-avr..>]24-Jun-2008 23:26 665k
[1038 - The Rose - Am..>]24-Jun-2008 23:27 1.2M
[104 - Richard Marx -..>]24-Jun-2008 23:27 587k
[1042 - Vangelis - Ch..>]24-Jun-2008 23:27 378k
[1043 - Yanni - One M..>]24-Jun-2008 23:27 343k
[1046 - Ennio Morrico..>]24-Jun-2008 23:27 265k
[1047 - Mariah Carey ..>]24-Jun-2008 23:27 281k
[1048 - Olivia Newton..>]24-Jun-2008 23:27 388k
[105 - Sinead OConnor..>]24-Jun-2008 23:27 860k
[107 - the beatles - ..>]24-Jun-2008 23:27 288k
[108 - Animals - The ..>]24-Jun-2008 23:27 186k
[108 - The Animals - ..>]24-Jun-2008 23:27 107k
[109 - yesterday.pdf]24-Jun-2008 23:27 401k
[11 - cho11_m2.pdf]24-Jun-2008 23:28 624k
[110 - Michael Jackso..>]24-Jun-2008 23:28 758k
[118 - Richard Marx -..>]24-Jun-2008 23:28 482k
[121 - Lionel Richie ..>]24-Jun-2008 23:28 207k
[122 - lucy in the sk..>]24-Jun-2008 23:28 348k
[13 - flashdance.pdf]24-Jun-2008 23:28 1.1M
[131 - Bob Marley - N..>]24-Jun-2008 23:28 424k
[133 - Charles Fox - ..>]24-Jun-2008 23:28 144k
[134 - Eric Clapton -..>]24-Jun-2008 23:29 1.2M
[136 - Led Zepplin - ..>]24-Jun-2008 23:29 231k
[137 - Mamas And The ..>]24-Jun-2008 23:29 289k
[15 - Main Title - Fo..>]24-Jun-2008 23:29 160k
[150 - Dire Straits -..>]24-Jun-2008 23:29 1.2M
[152 - Elton John - C..>]24-Jun-2008 23:29 576k
[155 - Jan Hammer - C..>]24-Jun-2008 23:29 165k
[158 - DONT YOU (FORG..>]24-Jun-2008 23:29 183k
[16 - Sarah McLachlan..>]24-Jun-2008 23:29 319k
[16 going on 17.pdf]24-Jun-2008 23:29 428k
[17 - Jurassik Park.pdf]24-Jun-2008 23:30 377k
[183 - Club nouveau -..>]24-Jun-2008 23:30 603k
[19 - Beautybeast.pdf]24-Jun-2008 23:30 70k
[2 - I believe I can ..>]24-Jun-2008 23:30 462k
[2 - believecanfly.pdf]24-Jun-2008 23:30 551k
[20 - John Kander - n..>]25-Jun-2008 00:17 524k
[21 - Des-ree - Kissi..>]24-Jun-2008 23:31 600k
[213 - Chris de Burgh..>]24-Jun-2008 23:31 383k
[219 - Bruce Hornsby ..>]24-Jun-2008 23:31 553k
[22 - schindlers-list..>]24-Jun-2008 23:31 432k
[232 - U2 - with or w..>]24-Jun-2008 23:31 814k
[24 - Everything I Do..>]24-Jun-2008 23:31 356k
[248 - I am blessed.pdf]24-Jun-2008 23:31 538k
[249 - The Beatles - ..>]24-Jun-2008 23:31 327k
[25 - Summernights.pdf]24-Jun-2008 23:31 105k
[250 - Counting Crows..>]24-Jun-2008 23:31 357k
[251 - Live - overcom..>]24-Jun-2008 23:32 635k
[252 - coldplay - tro..>]24-Jun-2008 23:32 172k
[253 - Enya - waterma..>]24-Jun-2008 23:32 406k
[26 - my heart will g..>]24-Jun-2008 23:32 498k
[260 - there-youll-be..>]24-Jun-2008 23:32 236k
[261 - Celine Dion - ..>]24-Jun-2008 23:32 272k
[262 - runaway-the_co..>]24-Jun-2008 23:32 199k
[263 - october.pdf]24-Jun-2008 23:32 251k
[264 - Ben Folds - Th..>]24-Jun-2008 23:32 80k
[265 - Harry Potter t..>]24-Jun-2008 23:32 32k
[266 - Take That - ho..>]24-Jun-2008 23:32 86k
[267 - BILLY JOEL - P..>]24-Jun-2008 23:32 225k
[268 - The simpsons.pdf]24-Jun-2008 23:32 250k
[269 - The entertaine..>]24-Jun-2008 23:32 22k
[27 - The Truman Show..>]24-Jun-2008 23:32 34k
[270 - lucy in the sk..>]24-Jun-2008 23:32 69k
[272 - Circle of life..>]24-Jun-2008 23:32 93k
[277 - Cats - Memory.pdf]25-Jun-2008 00:17 666k
[278 - Elton John - S..>]24-Jun-2008 23:33 139k
[28 - The heart asks ..>]24-Jun-2008 23:33 1.1M
[280 - Axel_Foley - B..>]24-Jun-2008 23:33 363k
[282 - Married With C..>]24-Jun-2008 23:33 67k
[285 - konstantine.pdf]24-Jun-2008 23:33 247k
[287 - The GodFather.pdf]24-Jun-2008 23:33 123k
[288 - Somewhere In T..>]24-Jun-2008 23:33 27k
[29 - The Pink Panthe..>]24-Jun-2008 23:33 144k
[290 - Prince of Egyp..>]24-Jun-2008 23:33 321k
[291 - david bowie - ..>]24-Jun-2008 23:33 222k
[293 - Michelle Branc..>]24-Jun-2008 23:34 466k
[294 - coldplay - in ..>]25-Jun-2008 00:18 385k
[295 - Avril Lavigne ..>]24-Jun-2008 23:34 813k
[296 - i_would_stay (..>]24-Jun-2008 23:34 143k
[298 - Mandy Moore - ..>]24-Jun-2008 23:34 149k
[3 - Lady and the Tra..>]24-Jun-2008 23:34 45k
[30 - I will always l..>]24-Jun-2008 23:34 193k
[300 - C�line Dion - ..>]24-Jun-2008 23:35 321k
[302 - britneyspearsi..>]24-Jun-2008 23:35 660k
[303 - Lenny Kravitz ..>]24-Jun-2008 23:35 548k
[304 - i_need_you_ton..>]24-Jun-2008 23:35 224k
[305 - The Piano (v2)..>]24-Jun-2008 23:35 34k
[308 - Somewhere Out ..>]24-Jun-2008 23:35 49k
[309 - Westlife-Befor..>]24-Jun-2008 23:35 711k
[31 - take my breath ..>]24-Jun-2008 23:35 430k
[312 - Neon Genesis E..>]24-Jun-2008 23:35 74k
[313 - Her Most Beaut..>]24-Jun-2008 23:35 206k
[316 - queen - bohemi..>]24-Jun-2008 23:35 449k
[317 - gonna be love.pdf]24-Jun-2008 23:35 297k
[319 - Phantom of the..>]24-Jun-2008 23:36 696k
[320 - Pocachontas - ..>]24-Jun-2008 23:36 194k
[323 - Green Day - Ti..>]24-Jun-2008 23:36 487k
[324 - dido - thank u..>]24-Jun-2008 23:36 902k
[325 - Dirty Dancing ..>]24-Jun-2008 23:36 774k
[326 - Elvis Presley ..>]24-Jun-2008 23:36 480k
[329 - love shine a l..>]24-Jun-2008 23:36 413k
[330 - Boys town gang..>]24-Jun-2008 23:36 136k
[331 - Rolling Stones..>]24-Jun-2008 23:36 191k
[335 - Marvin Gaye - ..>]24-Jun-2008 23:36 113k
[336 - Fame-Fame.pdf]24-Jun-2008 23:37 2.1M
[337 - Cat Stevens-Mo..>]24-Jun-2008 23:37 70k
[338 - Foreigner - I ..>]24-Jun-2008 23:37 714k
[340 - James Bond - F..>]24-Jun-2008 23:37 235k
[341 - James Bond - l..>]24-Jun-2008 23:37 216k
[342 - James Bond - s..>]24-Jun-2008 23:37 218k
[345 - Sarah McLachla..>]24-Jun-2008 23:37 41k
[347 - N Sync - This ..>]24-Jun-2008 23:37 698k
[348 - beauty and the..>]24-Jun-2008 23:37 95k
[349 - Jerry Lee Lewi..>]24-Jun-2008 23:38 912k
[351 - mariah carey -..>]24-Jun-2008 23:38 655k
[352 - Chicago - hard..>]24-Jun-2008 23:38 117k
[353 - Bob Marley - i..>]24-Jun-2008 23:38 144k
[354 - Dean Martin - ..>]24-Jun-2008 23:38 138k
[355 - Laura Pausini ..>]24-Jun-2008 23:38 976k
[357 - John Lennon - ..>]24-Jun-2008 23:38 751k
[357 - imagine.pdf]24-Jun-2008 23:38 44k
[359 - John Lennon - ..>]24-Jun-2008 23:38 343k
[36 - Under the Sea.zip]24-Jun-2008 23:39 1.2M
[361 - Kaze mo sora m..>]24-Jun-2008 23:39 45k
[362 - Jon Bon Jovi -..>]24-Jun-2008 23:39 915k
[365 - linkin park - ..>]25-Jun-2008 00:18 117k
[366 - Aladdin - whol..>]24-Jun-2008 23:39 545k
[367 - vanessa willia..>]24-Jun-2008 23:39 182k
[368 - Bon Jovi - Ill..>]24-Jun-2008 23:40 730k
[369 - marco borsato ..>]24-Jun-2008 23:40 625k
[37 - Les Miserables ..>]24-Jun-2008 23:40 750k
[372 - bryan adams - ..>]24-Jun-2008 23:40 782k
[373 - Evita - Id Be ..>]24-Jun-2008 23:40 250k
[374 - The Sound of M..>]24-Jun-2008 23:40 534k
[376 - Laura Pausini ..>]24-Jun-2008 23:40 174k
[378 - Bon Jovi - Tan..>]24-Jun-2008 23:40 125k
[38 - Les Miserables ..>]24-Jun-2008 23:41 1.3M
[381 - Shrek - Hallel..>]24-Jun-2008 23:41 401k
[384 - Bryan Adams - ..>]24-Jun-2008 23:41 805k
[389 - ANYTHINGFORYOU..>]24-Jun-2008 23:41 249k
[39 - Star Wars - Mai..>]24-Jun-2008 23:41 95k
[390 - roy turk - are..>]24-Jun-2008 23:41 203k
[391 - christopher cr..>]24-Jun-2008 23:41 190k
[392 - Raiders of the..>]24-Jun-2008 23:41 320k
[393 - Howard Ashman ..>]24-Jun-2008 23:41 536k
[394 - Take That - co..>]24-Jun-2008 23:41 210k
[395 - Barbra Streisa..>]24-Jun-2008 23:41 507k
[397 - The Doors - ri..>]25-Jun-2008 00:18 242k
[399 - The Doors - Li..>]24-Jun-2008 23:42 219k
[4 - Evita - You must..>]24-Jun-2008 23:42 317k
[40 - Wet Wet Wet - L..>]24-Jun-2008 23:42 528k
[400 - Morris Albert ..>]24-Jun-2008 23:42 205k
[401 - The Calling - ..>]24-Jun-2008 23:42 493k
[407 - Richard Clayde..>]24-Jun-2008 23:42 346k
[409 - Natalie Imbrug..>]24-Jun-2008 23:43 967k
[41 - Nocturne 2 opus..>]24-Jun-2008 23:43 154k
[415 - Hoagy Carmicha..>]24-Jun-2008 23:43 205k
[416 - George Cory - ..>]24-Jun-2008 23:43 202k
[417 - Mortimer Kean ..>]24-Jun-2008 23:43 560k
[418 - Smashing pumpk..>]24-Jun-2008 23:43 996k
[419 - The Matrix - c..>]24-Jun-2008 23:43 74k
[42 - moonlight sonat..>]24-Jun-2008 23:43 925k
[422 - Phantom of the..>]24-Jun-2008 23:43 611k
[426 - Anouk - Nobody..>]24-Jun-2008 23:43 134k
[427 - Maladie DAmour..>]24-Jun-2008 23:43 406k
[428 - Marco Borsato ..>]24-Jun-2008 23:44 561k
[433 - Marco Borsato ..>]24-Jun-2008 23:44 334k
[435 - Marco Borsato ..>]24-Jun-2008 23:44 458k
[438 - Marco Borsato ..>]24-Jun-2008 23:44 491k
[442 - Marco Borsato ..>]24-Jun-2008 23:44 424k
[443 - Marco Borsato ..>]24-Jun-2008 23:44 364k
[446 - The Eagles - H..>]24-Jun-2008 23:44 46k
[447 - Fools Garden -..>]24-Jun-2008 23:44 137k
[454 - Marco Borsato ..>]24-Jun-2008 23:44 254k
[456 - Marco Borsato ..>]24-Jun-2008 23:44 424k
[460 - Marco Borsato ..>]24-Jun-2008 23:44 328k
[461 - Toni Braxton -..>]24-Jun-2008 23:44 93k
[462 - Shania Twain -..>]24-Jun-2008 23:44 51k
[463 - Elton John - c..>]24-Jun-2008 23:44 23k
[464 - Titanic - My H..>]24-Jun-2008 23:44 56k
[465 - Billy Joel - t..>]24-Jun-2008 23:45 160k
[467 - S Club 7 - Nev..>]24-Jun-2008 23:45 1.1M
[468 - staind - its b..>]24-Jun-2008 23:45 874k
[469 - Hollywood Hote..>]24-Jun-2008 23:45 1.0M
[473 - Ace of Base - ..>]24-Jun-2008 23:45 1.1M
[475 - Michael Jackso..>]24-Jun-2008 23:46 635k
[476 - Phantom of the..>]24-Jun-2008 23:46 1.1M
[477 - The Beatles - ..>]24-Jun-2008 23:46 411k
[478 - The Beatles - ..>]24-Jun-2008 23:46 398k
[479 - The Beatles - ..>]24-Jun-2008 23:46 415k
[480 - Amiga Mia - Al..>]24-Jun-2008 23:46 99k
[481 - Coraz�n Partio..>]24-Jun-2008 23:46 82k
[482 - It aint over t..>]24-Jun-2008 23:46 36k
[483 - Pretty Woman -..>]24-Jun-2008 23:46 135k
[484 - Think Twice - ..>]24-Jun-2008 23:46 292k
[486 - Falling into y..>]24-Jun-2008 23:46 215k
[489 - Volumia - Afsc..>]24-Jun-2008 23:46 286k
[49 - Theme From The ..>]24-Jun-2008 23:46 194k
[490 - Volumia - Hou ..>]24-Jun-2008 23:46 284k
[491 - Louis Armstron..>]24-Jun-2008 23:47 315k
[493 - LeAnn Rimes - ..>]24-Jun-2008 23:47 834k
[494 - R. Kelly - I ..>]24-Jun-2008 23:47 875k
[496 - Boyz II Men -..>]24-Jun-2008 23:47 1.1M
[50 - fur elise.pdf]24-Jun-2008 23:47 47k
[500 - Sarah McLachla..>]24-Jun-2008 23:47 785k
[501 - Bryan Adams - ..>]24-Jun-2008 23:47 383k
[502 - Jewel - Foolis..>]24-Jun-2008 23:47 364k
[503 - The Beatles - ..>]24-Jun-2008 23:48 467k
[504 - Alanis Morisse..>]24-Jun-2008 23:48 497k
[505 - Astor Piazolla..>]24-Jun-2008 23:48 123k
[506 - La margarita d..>]24-Jun-2008 23:48 83k
[507 - Say my name - ..>]24-Jun-2008 23:48 267k
[508 - Christina Agui..>]24-Jun-2008 23:48 754k
[509 - Richard Marx -..>]24-Jun-2008 23:48 958k
[51 - Drops Of Jupite..>]24-Jun-2008 23:48 220k
[510 - La Boum - Real..>]24-Jun-2008 23:48 446k
[511 - Guns N Roses -..>]24-Jun-2008 23:48 38k
[512 - Star Wars - Im..>]24-Jun-2008 23:48 39k
[513 - Shania Twain -..>]24-Jun-2008 23:49 1.0M
[514 - Brandy - Have ..>]24-Jun-2008 23:49 880k
[518 - PHIL COLLINS ..>]24-Jun-2008 23:49 176k
[519 - James Bond - D..>]24-Jun-2008 23:49 227k
[52 - awomensworth.pdf]24-Jun-2008 23:49 991k
[520 - James Bond - G..>]24-Jun-2008 23:49 227k
[521 - James Bond - T..>]24-Jun-2008 23:49 291k
[522 - James Bond - M..>]24-Jun-2008 23:49 111k
[523 - James Bond - T..>]24-Jun-2008 23:49 206k
[529 - Mariah Carey -..>]24-Jun-2008 23:49 696k
[53 - No Doubt - dont..>]24-Jun-2008 23:50 681k
[530 - James Bond - F..>]24-Jun-2008 23:50 237k
[531 - Diana King - i..>]24-Jun-2008 23:50 406k
[532 - Frank Sinatra ..>]24-Jun-2008 23:50 382k
[534 - Cats - memory ..>]24-Jun-2008 23:50 325k
[536 - Love Story - l..>]24-Jun-2008 23:50 382k
[537 - Fernando - Abb..>]24-Jun-2008 23:50 187k
[538 - Layla - Eric C..>]24-Jun-2008 23:50 87k
[539 - Go West - True..>]24-Jun-2008 23:50 162k
[54 - Enya - evening ..>]24-Jun-2008 23:50 280k
[540 - Y si fuera ell..>]24-Jun-2008 23:50 107k
[541 - Erroll Garner ..>]24-Jun-2008 23:50 151k
[542 - David Raksin -..>]24-Jun-2008 23:50 101k
[543 - Duke Ellington..>]24-Jun-2008 23:50 105k
[544 - ben folds five..>]24-Jun-2008 23:50 385k
[548 - Alicia Keys - ..>]24-Jun-2008 23:51 1.1M
[549 - Alicia Keys - ..>]24-Jun-2008 23:51 1.3M
[55 - Phill Collins -..>]24-Jun-2008 23:51 535k
[550 - Alicia Keys - ..>]24-Jun-2008 23:51 557k
[551 - radiohead - ka..>]24-Jun-2008 23:51 497k
[558 - toni braxton -..>]24-Jun-2008 23:51 606k
[559 - Leann Rimes - ..>]24-Jun-2008 23:52 1.0M
[559 - Leann Rimes - ..>]24-Jun-2008 23:52 560k
[56 - Queen - we are ..>]24-Jun-2008 23:52 201k
[560 - Mr. Hollands O..>]24-Jun-2008 23:52 290k
[561 - Elton John - S..>]24-Jun-2008 23:52 55k
[562 - George Gershwi..>]24-Jun-2008 23:52 443k
[563 - George Gershwi..>]24-Jun-2008 23:52 631k
[564 - George Gershwi..>]24-Jun-2008 23:52 448k
[565 - George Gershwi..>]25-Jun-2008 00:18 505k
[566 - George Gershwi..>]24-Jun-2008 23:53 183k
[567 - Aimee Mann - W..>]24-Jun-2008 23:53 389k
[569 - Robie Williams..>]24-Jun-2008 23:53 497k
[57 - new born.pdf]24-Jun-2008 23:54 1.0M
[570 - Jacques Brel -..>]24-Jun-2008 23:54 531k
[571 - Frank Sinatra ..>]24-Jun-2008 23:54 301k
[572 - Leann Rimes - ..>]24-Jun-2008 23:54 179k
[573 - SIMON & GARFUN..>]24-Jun-2008 23:54 112k
[574 - Mike Batt - BR..>]24-Jun-2008 23:54 152k
[575 - THE JACKSONS -..>]24-Jun-2008 23:54 175k
[576 - ELTON JOHN - C..>]24-Jun-2008 23:55 204k
[577 - THE POLICE - E..>]24-Jun-2008 23:55 177k
[578 - THE ROLLING ST..>]24-Jun-2008 23:55 239k
[579 - Michael Jackso..>]24-Jun-2008 23:55 234k
[58 - beautiful.pdf]24-Jun-2008 23:55 56k
[580 - Enya - only ti..>]24-Jun-2008 23:55 204k
[581 - Enya - waterma..>]24-Jun-2008 23:55 68k
[582 - Bill Haley - R..>]24-Jun-2008 23:56 744k
[583 - Usher - u remi..>]24-Jun-2008 23:56 615k
[589 - Pocachontas - ..>]24-Jun-2008 23:56 578k
[59 - bright eyes.pdf]24-Jun-2008 23:56 427k
[590 - Queen - Flash.pdf]24-Jun-2008 23:56 297k
[592 - Queen - Save M..>]24-Jun-2008 23:56 195k
[593 - Queen - We Wil..>]24-Jun-2008 23:56 119k
[594 - Krezip - Fine.pdf]24-Jun-2008 23:56 196k
[595 - I Believe - Un..>]24-Jun-2008 23:57 973k
[596 - Celine dion - ..>]24-Jun-2008 23:57 841k
[597 - Destiny Child ..>]24-Jun-2008 23:57 400k
[599 - Aqua - Doctor ..>]24-Jun-2008 23:57 62k
[6 - Evita - dont cry..>]24-Jun-2008 23:57 324k
[60 - cry.pdf]24-Jun-2008 23:57 537k
[601 - Elton John - R..>]24-Jun-2008 23:57 491k
[602 - enya - tea-hou..>]24-Jun-2008 23:57 178k
[604 - Enya - floras ..>]24-Jun-2008 23:57 781k
[606 - Enya - silver ..>]24-Jun-2008 23:57 130k
[607 - Paul Mc Cartne..>]24-Jun-2008 23:58 320k
[608 - Helmut Lotti -..>]24-Jun-2008 23:58 133k
[609 - Lionel Bart - ..>]24-Jun-2008 23:58 305k
[610 - Mamas and the ..>]24-Jun-2008 23:58 289k
[611 - The Rolling St..>]24-Jun-2008 23:58 359k
[615 - Marco Borsato ..>]24-Jun-2008 23:58 318k
[617 - The Beatles - ..>]24-Jun-2008 23:58 466k
[618 - Kathy Fisher -..>]24-Jun-2008 23:58 74k
[619 - the beatles -..>]24-Jun-2008 23:58 497k
[622 - The Beatles - ..>]24-Jun-2008 23:58 346k
[623 - The Beatles - ..>]24-Jun-2008 23:58 248k
[624 - Coldplay - The..>]24-Jun-2008 23:58 395k
[625 - Burce Springst..>]24-Jun-2008 23:58 428k
[629 - The Beatles - ..>]24-Jun-2008 23:59 235k
[63 - 2become1.pdf]24-Jun-2008 23:59 2.4M
[630 - The Beatles - ..>]24-Jun-2008 23:59 248k
[631 - The Beatles - ..>]24-Jun-2008 23:59 257k
[632 - The Beatles - ..>]24-Jun-2008 23:59 241k
[633 - The Beatles - ..>]24-Jun-2008 23:59 229k
[634 - The Beatles - ..>]24-Jun-2008 23:59 504k
[635 - The Beatles - ..>]24-Jun-2008 23:59 505k
[636 - The Beatles - ..>]25-Jun-2008 00:00 380k
[637 - The Beatles - ..>]25-Jun-2008 00:00 568k
[638 - The Beatles - ..>]25-Jun-2008 00:00 336k
[639 - The Beatles - ..>]25-Jun-2008 00:00 349k
[64 - Mariah Carey - ..>]25-Jun-2008 00:00 566k
[640 - Paul Simon - B..>]25-Jun-2008 00:00 663k
[643 - Mulan - Reflec..>]25-Jun-2008 00:00 729k
[649 - Elton John - I..>]25-Jun-2008 00:00 175k
[65 - Gabrielle - Out..>]25-Jun-2008 00:00 367k
[650 - Elton John - N..>]25-Jun-2008 00:00 233k
[652 - The Fugees - K..>]25-Jun-2008 00:01 830k
[653 - Moulain Rouge ..>]25-Jun-2008 00:01 884k
[658 - Joan Osborne -..>]25-Jun-2008 00:01 426k
[659 - Glenn Miller -..>]25-Jun-2008 00:01 129k
[66 - Robie Williams ..>]25-Jun-2008 00:01 435k
[661 - Buffy The Musi..>]25-Jun-2008 00:01 17k
[662 - muse - space d..>]25-Jun-2008 00:01 330k
[664 - Gabrielle - Ri..>]25-Jun-2008 00:01 585k
[667 - Michael Nyman ..>]25-Jun-2008 00:01 70k
[67 - Enrique Iglesia..>]25-Jun-2008 00:01 614k
[671 - Yann Tiersen -..>]25-Jun-2008 00:02 555k
[672 - Yann Tiersen -..>]25-Jun-2008 00:02 248k
[674 - Stevie Wonder ..>]25-Jun-2008 00:02 235k
[676 - Michael Nyman ..>]25-Jun-2008 00:02 516k
[677 - Kate Winslet -..>]25-Jun-2008 00:02 292k
[678 - John Denver - ..>]25-Jun-2008 00:02 441k
[68 - Alicia Keys - F..>]25-Jun-2008 00:02 952k
[683 - Enya - Storms ..>]25-Jun-2008 00:02 363k
[684 - utada hikaru -..>]25-Jun-2008 00:02 346k
[685 - Adam Sandler -..>]25-Jun-2008 00:02 216k
[686 - The Corrs - on..>]25-Jun-2008 00:02 601k
[688 - Abba - chiquit..>]25-Jun-2008 00:02 326k
[689 - Abba - I have ..>]25-Jun-2008 00:03 527k
[69 - Phil Collins - ..>]25-Jun-2008 00:03 85k
[690 - Abba - mamma m..>]25-Jun-2008 00:03 357k
[691 - Kylie Minogue ..>]25-Jun-2008 00:03 354k
[693 - Close your eye..>]25-Jun-2008 00:03 1.2M
[697 - Phil Collins -..>]25-Jun-2008 00:03 207k
[698 - The Backstreet..>]25-Jun-2008 00:03 327k
[699 - Queen - Made i..>]25-Jun-2008 00:03 168k
[70 - Celine Dion - I..>]25-Jun-2008 00:03 260k
[700 - Anouk - Its a ..>]25-Jun-2008 00:03 257k
[709 - The prayer cel..>]25-Jun-2008 00:03 318k
[709 - The prayer cel..>]25-Jun-2008 00:03 284k
[710 - Bette Midler -..>]25-Jun-2008 00:03 26k
[715 - Ben Folds - Za..>]25-Jun-2008 00:04 129k
[718 - Abba - thank y..>]25-Jun-2008 00:04 244k
[720 - BILL WITHERS -..>]25-Jun-2008 00:04 81k
[722 - Celine Dion - ..>]25-Jun-2008 00:04 239k
[723 - Elton John - S..>]25-Jun-2008 00:04 630k
[724 - The Eagles - d..>]25-Jun-2008 00:04 68k
[727 - Janet Jackson ..>]25-Jun-2008 00:04 187k
[729 - BritneySpears ..>]25-Jun-2008 00:04 172k
[73 - Elton John - Yo..>]25-Jun-2008 00:04 271k
[730 - Brian McKnight..>]25-Jun-2008 00:04 143k
[731 - Cher - Believe..>]25-Jun-2008 00:04 182k
[732 - Selena - Dream..>]25-Jun-2008 00:04 200k
[733 - Boyz II Men - ..>]25-Jun-2008 00:04 161k
[734 - Jewel - How DO..>]25-Jun-2008 00:04 158k
[735 - All 4 one - I ..>]25-Jun-2008 00:04 230k
[736 - Cher - If I co..>]25-Jun-2008 00:04 245k
[737 - Seal - Kiss Fr..>]25-Jun-2008 00:04 150k
[738 - Ricky Martin -..>]25-Jun-2008 00:04 217k
[739 - LosDelRio - Ma..>]25-Jun-2008 00:04 162k
[74 - Dont let the su..>]25-Jun-2008 00:04 121k
[740 - Quit Playing G..>]25-Jun-2008 00:05 133k
[741 - Vanessa WIllia..>]25-Jun-2008 00:05 129k
[742 - Santana - Smoo..>]25-Jun-2008 00:05 137k
[743 - NSync - Spent ..>]25-Jun-2008 00:05 179k
[744 - Madonna - Take..>]25-Jun-2008 00:05 153k
[745 - Celine Dion - ..>]25-Jun-2008 00:05 203k
[746 - Elvis Presley ..>]25-Jun-2008 00:05 216k
[747 - Elvis Presley ..>]25-Jun-2008 00:05 200k
[748 - Elvis Presley ..>]25-Jun-2008 00:05 350k
[749 - Elvis Presley ..>]25-Jun-2008 00:05 223k
[75 - Train - Drops O..>]25-Jun-2008 00:05 308k
[750 - Elvis Presley ..>]25-Jun-2008 00:05 319k
[751 - Enya - A day w..>]25-Jun-2008 00:05 409k
[77 - Sting - Ill be ..>]25-Jun-2008 00:05 532k
[773 - Enya - Wild Ch..>]25-Jun-2008 00:05 902k
[774 - Yanni - lectio..>]25-Jun-2008 00:06 414k
[785 - SARAH MCLACHLA..>]25-Jun-2008 00:06 268k
[786 - The Beatles - ..>]25-Jun-2008 00:06 386k
[787 - The BEATLES - ..>]25-Jun-2008 00:06 117k
[79 - REM - Everybody..>]25-Jun-2008 00:06 274k
[8 - Mission Impossib..>]25-Jun-2008 00:06 762k
[804 - Vanessa Carlto..>]25-Jun-2008 00:06 549k
[807 - Yann Tiersen -..>]25-Jun-2008 00:06 58k
[81 - Everything In I..>]25-Jun-2008 00:06 522k
[813 - Anouk - my lif..>]25-Jun-2008 00:06 212k
[814 - frank sinatra ..>]25-Jun-2008 00:06 293k
[817 - Muse - feeling..>]25-Jun-2008 00:06 520k
[818 - Olivia Newton ..>]25-Jun-2008 00:07 97k
[82 - Avril Lavigne -..>]25-Jun-2008 00:07 29k
[824 - Julie Andrews ..>]25-Jun-2008 00:07 154k
[825 - grease - summe..>]25-Jun-2008 00:07 529k
[828 - Elton John - D..>]25-Jun-2008 00:07 271k
[829 - Tori Amos - co..>]25-Jun-2008 00:07 489k
[830 - Vangelis - Cha..>]25-Jun-2008 00:07 209k
[831 - O Town - All o..>]25-Jun-2008 00:07 721k
[832 - Eric Clapton -..>]25-Jun-2008 00:07 553k
[84 - Metallica - Not..>]25-Jun-2008 00:07 125k
[843 - Backstreet_Boy..>]25-Jun-2008 00:07 332k
[848 - five for fight..>]25-Jun-2008 00:07 543k
[849 - mariah Carey -..>]25-Jun-2008 00:08 621k
[85 - Lionel Richie -..>]25-Jun-2008 00:08 342k
[850 - The Bangles - ..>]25-Jun-2008 00:08 276k
[851 - All Saints - N..>]25-Jun-2008 00:08 1015k
[852 - Billy Joel (Al..>]25-Jun-2008 00:08 385k
[856 - Jim Brickman -..>]25-Jun-2008 00:19 4.0M
[859 - Smashing Pumpk..>]25-Jun-2008 00:08 41k
[860 - Sting - Fields..>]25-Jun-2008 00:09 221k
[865 - Walter Kent - ..>]25-Jun-2008 00:19 233k
[866 - Alladin - A Wh..>]25-Jun-2008 00:09 363k
[867 - brian mcknight..>]25-Jun-2008 00:09 1005k
[868 - Brian Mcknight..>]25-Jun-2008 00:10 845k
[868 - brian mcknight..>]25-Jun-2008 00:09 601k
[869 - Brian Mcknight..>]25-Jun-2008 00:10 489k
[87 - titanic - My he..>]25-Jun-2008 00:10 541k
[870 - Alan Menken - ..>]25-Jun-2008 00:10 435k
[871 - Anouk - crucif..>]25-Jun-2008 00:10 74k
[871 - Michelle Branc..>]25-Jun-2008 00:10 1008k
[88 - Bon Jovi - Alwa..>]25-Jun-2008 00:10 204k
[881 - The Beatles - ..>]25-Jun-2008 00:10 412k
[885 - Tori Amos - sm..>]25-Jun-2008 00:10 55k
[888 - The Beatles - ..>]25-Jun-2008 00:10 428k
[89 - Bed Of Roses.pdf]25-Jun-2008 00:11 246k
[891 - Irving Gordon ..>]25-Jun-2008 00:11 283k
[892 - Avril Lavigne ..>]25-Jun-2008 00:11 453k
[893 - Mandy Moore - ..>]25-Jun-2008 00:11 476k
[894 - Afroman - Beca..>]25-Jun-2008 00:11 328k
[9 - James Bond - dr ..>]25-Jun-2008 00:11 216k
[903 - Michelle Branc..>]25-Jun-2008 00:11 969k
[906 - Oleta Adams - ..>]25-Jun-2008 00:11 547k
[908 - Edith Piaf - l..>]25-Jun-2008 00:11 394k
[91 - november_rain.pdf]25-Jun-2008 00:11 326k
[910 - singing in the..>]25-Jun-2008 00:11 247k
[914 - Jim Brickman -..>]25-Jun-2008 00:11 155k
[915 - Madonna - Live..>]25-Jun-2008 00:12 976k
[916 - Paul Simon - E..>]25-Jun-2008 00:12 76k
[918 - Tori Amos - Si..>]25-Jun-2008 00:12 104k
[919 - Hikari to Kake..>]25-Jun-2008 00:12 122k
[92 - Krezip - I Woul..>]25-Jun-2008 00:12 1.4M
[922 - smashing pumpk..>]25-Jun-2008 00:12 216k
[924 - Christina Agui..>]25-Jun-2008 00:12 813k
[928 - FEEL-ROBBIE WI..>]25-Jun-2008 00:12 295k
[929 - Alan Silvestri..>]25-Jun-2008 00:12 285k
[93 - athousandmiles.zip]25-Jun-2008 00:13 673k
[934 - Boyzone - You ..>]25-Jun-2008 00:13 197k
[935 - Bryan Adams & ..>]25-Jun-2008 00:13 767k
[936 - Cy Coleman - C..>]25-Jun-2008 00:13 644k
[937 - Elton John - H..>]25-Jun-2008 00:13 631k
[94 - Robbie Williams..>]25-Jun-2008 00:13 148k
[943 - Leonard Bernst..>]25-Jun-2008 00:13 207k
[95 - Aerosmith - I d..>]25-Jun-2008 00:19 187k
[950 - Stan - Elton J..>]25-Jun-2008 00:14 76k
[951 - Backstreet Boy..>]25-Jun-2008 00:14 411k
[952 - DJ Sammi - Hea..>]25-Jun-2008 00:14 135k
[956 - air supply - a..>]25-Jun-2008 00:14 88k
[958 - Charles Strous..>]25-Jun-2008 00:14 1.3M
[959 - Dreams - The..>]25-Jun-2008 00:14 477k
[96 - Tori Amos - Win..>]25-Jun-2008 00:14 77k
[962 - Las Ketchup - ..>]25-Jun-2008 00:14 223k
[964 - Whenever where..>]25-Jun-2008 00:14 104k
[966 - Bob Gaudio - c..>]25-Jun-2008 00:14 391k
[97 - Jewel - Foolish..>]25-Jun-2008 00:14 61k
[970 - Backstreet Boy..>]25-Jun-2008 00:15 794k
[976 - Vangelis - Con..>]25-Jun-2008 00:15 614k
[979 - Pie Jesu - A..>]25-Jun-2008 00:15 469k
[98 - shaggy - angel.pdf]25-Jun-2008 00:15 1.3M
[980 - Bonnie Tyler -..>]25-Jun-2008 00:15 662k
[982 - Elton John - C..>]25-Jun-2008 00:15 491k
[983 - Enya - May It ..>]25-Jun-2008 00:15 329k
[986 - James Horner -..>]25-Jun-2008 00:15 106k
[990 - Kelly Clarkson..>]25-Jun-2008 00:16 892k
[991 - Love theme fro..>]25-Jun-2008 00:16 502k
[992 - norah jones - ..>]25-Jun-2008 00:16 751k
[993 - Simon and Gart..>]25-Jun-2008 00:16 301k
[994 - Where Do I Beg..>]25-Jun-2008 00:16 399k
[997 - Youll Be In My..>]25-Jun-2008 00:19 1.0M
[Under the Sea page.pdf]25-Jun-2008 00:17 1.6M
[Vanessa Carlton - A ..>]25-Jun-2008 00:17 1.2M
## Thứ Sáu, 8 tháng 5, 2009
###
[Sheet nhạc Piano](http://nxlcomposer.blogspot.com/2009/05/parent-directory-24-jun-2008-2325-25.html)
Posted by Nguyễn Xuân Lưu at
[12:07](http://nxlcomposer.blogspot.com/2009/05/parent-directory-24-jun-2008-2325-25.html) [](https://www.blogger.com/email-post.g?blogID=7174288257026009991&postID=6248459568996727454)
![ ](http://www.blogger.com/img/icon18_email.gif)
[](https://www.blogger.com/post-edit.g?blogID=7174288257026009991&postID=6248459568996727454&from=pencil)
![ ](https://resources.blogblog.com/img/icon18_edit_allbkg.gif)
Labels:
[Sheet nhạc](http://nxlcomposer.blogspot.com/search/label/Sheet%20nh%E1%BA%A1c)
Đăng ký:
## Không có nhận xét nào:
## Đăng nhận xét

WARC-Type: response

Content-Type: application/http; msgtype=response

WARC-Identified-Payload-Type: text/html

X-Content-Type-Options: nosniff

X-XSS-Protection: 1; mode=block

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


markdown:
# Nghĩa và từ nguyên của MOONG
Từ “moong” trong cái tít này đã làm cho một số bạn đọc bỡ ngỡ vì vừa không hiểu nghĩa và càng không biết được xuất xứ của nó, thậm chí còn thắc mắc rằng không biết nó có thật sự tồn tại hay không.
“Moong” là một từ có thật và cũng xuất hiện với một tần số đủ để ta có thể tìm thấy nó một cách không khó khăn gì lắm. Sau đây là một số dẫn chứng:
1. “Theo con đường xoáy ấy, xe xuống chở đất đá lên đưa ra bãi thải và xe chở than lên đưa về khu sàng tuyển. Cái lòng phễu khổng lồ ấy người ta gọi là hố moong” (Nguyễn Thị Mai, “Trong lòng moong Cao Sơn”, Biên Phòng, 8-11-2011).
2. “Xóm chúng tôi nằm trong lòng moong nên trong nhiều năm qua phải hứng chịu cảnh tượng chưa từng xảy ra […………] Các anh thấy đấy, mảnh vườn này thành ‘đất chết’ vì không có nước do mạch nước ngầm chảy hết ra lòng moong” (Duy Tuấn - Thăng Long, “Sống dở chết dở tại mỏ sắt lớn nhất ĐNA - Bài 5: Sóng ngầm nơi moong mỏ”, Vietnamnet, 9-12-2011).
3. “Moong than Cao Sơn như chiếc chảo khổng lồ, đến nỗi, từ bờ moong nhìn xuống, những chiếc xe trọng tải gần 100 tấn bò lồm ngồm như những chú… cua!” (Nhân Văn, “Chuyện lạ ở moong Cao Sơn”, Vinacomin, 8-10-2012).
4. “Một ngày cuối năm, lên moong than Hà Tu, tôi vẫn thấy quang cảnh sản xuất quen thuộc như những ngày thường hồi đầu năm” (Minh Hoa, “Tháng ‘củ mật’ ở moong than Hà Tu”, Vinacomin, 21-1-2014).
5. “[….] cả một đời ông lận đận với moong sâu […]. Về kỹ thuật, ông là người kỹ tính, người ta gặp ông có khi đi chán dưới lòng moong, tưởng rằng ông sẽ về! Vậy mà [….]” (Phóng sự “Bóng người ở lại giữa moong sâu”, Báo Quảng Ninh, 23-1-2010).
6. “Đây là mô đất lau sậy um tùm, nằm sát con đường nội bộ dẫn từ moong H10 (moong than đang khai thác của Công ty Than Mông Dương) về bãi than giáp ranh với đầu băng tải của Nhà máy Nhiệt điện Mông Dương” (Trọng Phú, “Rút ruột mỏ than Mông Dương - Bài 1: Một đêm, hàng ngàn tấn than bị trộm”, Pháp luật, 31-10-2013).
7. “[……] nhờ có nghị lực thép, những người thợ mỏ đã vượt qua tất cả để hôm nay trên công trường rộn ràng tiếng xe, tiếng máy, hàng trăm tấn quặng sắt nằm sừng sững giữa lòng moong...” (Phan Thế Cải, “Từ lòng moong lên mặt đất”, Nhân dân điện tử, 10-7-2011).
8. “Bên dưới là những lòng moong đang tiếp tục bị khoét sâu vào lòng núi [……]” (Phan A, “Cận cảnh hoang tàn tại một mỏ than lộ thiên”, Đại kỷ nguyên, 9-1-2016).
Cứ như trên thì “moong” hiển nhiên là một từ có thật nên cũng đã được Từ điển tiếng Việt của Trung tâm Từ điển học (Vietlex) do Hoàng Phê chủ biên thu nhận và giảng là “khẩu ngữ, ít dùng: đáy mỏ”. Nhưng tiếc rằng điều chú thích của quyển từ điển này thì lại rất sai vì từ “moong” chẳng những không thuộc về khẩu ngữ mà còn là một thuật ngữ của ngành khai khoáng nữa. “Quy định quy chuẩn kỹ thuật quốc gia về an toàn trong khai thác mỏ lộ thiên” của Bộ Công Thương gồm có 12 chương mà chương 1 là “Quy định chung” với Điều 2 là “Giải thích từ ngữ”; tại điều này, mục 18 được ghi với chú thích bằng tiếng Anh trong ngoặc đơn như sau:
“18. Moong (pit): Là đáy mỏ, phần thấp nhất của đáy mỏ được bao khép kín bởi bờ mỏ xung quanh”.
Cứ như trên thì “moong” là một thuật ngữ đã được giải thích rất rõ ràng. Chẳng những thế nó còn được chính thức vận dụng trong lời ăn tiếng nói hằng ngày một cách hoàn toàn đúng với nội hàm đã nêu trong bản “Quy định”, như đã thấy với 8 dẫn chứng ở trên. Vậy làm sao có thể nói nó là khẩu ngữ?
Nhưng từ “moong” này do đâu mà ra? Sự tra cứu của chúng tôi cho phép khẳng định rằng nó là một sản phẩm ra đời từ sự khai thác thuộc địa của thực dân Pháp, trong đó có việc khai thác mỏ, đặc biệt là Mỏ than Hòn Gai, mà Pháp gọi là “Mines de charbon de Hongay”. Nói đến “mine” thì phải nói đến “gisement”. Ta cứ tìm trên mạng thì có thể thấy hai từ này thường “cặp bồ” với nhau. “Gisement” được Le grand Robert định nghĩa là “Disposition des couches de minéraux dans le sous-sol […] Par extension. Masse minérale importante, propre à l’exploitation”, nghĩa là “Cách sắp xếp các lớp khoáng sản trong tầng đất cái […] Nghĩa rộng. Khối khoáng sản quan trọng, thích hợp với việc khai thác”.
Chính âm tiết “-ment” của “gisement” đã được phiên âm sang tiếng Việt kiểu bình dân thành “moong”. Hiện tượng này không có gì lạ: nó cũng giống như chuyện người Việt Miền Nam đã phiên âm “ciment” thành “xi-moong”, như có thể thấy trong nhan đề “Vôi đá xanh, vôi chịu nước và xi-moong. Cách làm đá giả” trên Tạp chí Khoa Học số 59 (1-12-1933). Ca dao Miền Nam có câu:
“Chợ Sài Gòn cẩn đá, chợ Rạch Giá cẩn xi-moong
Giã em ở lại vuông tròn
Anh về xứ sở không còn ra vô”.
Trẻ con miền Nam hồi nửa đầu thế kỷ XX không lạ gì với hai tiếng “xi-moong” này vì những viên bi mà họ chơi thời đó thường làm bằng xi-măng (về sau mới có bi thuỷ tinh ngũ sắc). Đó là những “cục đạn xi-moong”.
Vậy “-ment” của “gisement” đi vào tiếng Việt thành “moong” không phải là chuyện không thể xảy ra. Còn chuyện “gise-” bị tỉnh lược thì chỉ là hệ quả của việc rút ngắn khi phiên âm: - adjudant > ách (chuẩn úy), - aiguille > ghi (thiết bị dùng để chuyển đường ray tàu hỏa), - alcool > cồn, - aluminium > nhôm, - portefeuille > bóp (ban đầu là bóp-phơi), - pourboire > (tiền) boa, - copier > cóp, - correcteur > cò (người sửa mo-rát), - commissaire > cò (cảnh sát trưởng), - essence > xăng, - effet > phê, - [en] arrière > de ( = lùi), v.v…
Tóm lại, “moong” là một từ Việt gốc Pháp, bắt nguồn ở từ “gisement”, có nghĩa là “vỉa [khoáng sản, đất đá, v.v.]”. Ngoài nguyên từ (etymon) này ra, chúng tôi không thấy có bất cứ từ nào khác có thể là ứng viên thích hợp. Dĩ nhiên là nếu có vị thức giả nào chỉ ra một nguyên từ khác có sức thuyết phục mạnh hơn thì chúng tôi sẽ vô cùng cám ơn.
**A.C** ** Theo Năng lượng Mới số 534**

Server: Apache/2.2.15 (CentOS)

Connection: close

Pragma: no-cache

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

Vary: Accept-Encoding

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


markdown:
Báo cáo tài chính quý 1 năm 2016
Ngày cập nhật:
20-04-2016 20:24
(Đã xem
1028
lần)
Báo cáo tài chính quý 1 năm 2016
Bài viết khác
CÔNG TY CP CẢNG DỊCH VỤ DẦU KHÍ ĐÌNH VŨ
Địa chỉ:
KCN Đình Vũ - Đông Hải 2 - Hải An - Hải Phòng
Điện thoại:
0225 979710
- Fax:
0225 979712
Email:
admin@ptscdinhvu.com.vn
- Website:
www.ptscdinhvu.com.vn
Trang chủ|
Giới thiệu|
Dịch vụ|
Tin tức|
Báo cáo định kỳ|
Liên hệ|
EMAIL
Số lượt truy cập:
298434

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

Cache-Control: private


markdown:
Purcellville Fire Company
Purcellville, VA
Ira Foreback
Position(s): Life Member
Contact Information
Purcellville Fire Company
PO Box 386
Purcellville, VA 20134
Follow Us
Member Links
Member Only News
Member Login
Phone
Emergency: 911
Phone: 540-338-5961
Account
Billing
Support

Server: Apache

Cache-Control: no-store, no-cache, must-revalidate

Link: <http://purcellvillefire.org/wp-json/>; rel="https://api.w.org/", <http://purcellvillefire.org/?p=710>; rel=shortlink


markdown:
Trang chủ
Du lịch trong nước
Du lịch Miền Bắc
Du lịch Hà Nội
Du lịch Ninh Bình
Du lịch Sapa – Hà Khẩu
Du lịch Hạ Long – Du lịch Cát Bà
Du lịch Đông Tây Bắc
Du lịch Đồng Bằng Sông Hồng
Du lịch Các vùng khác
Du lịch Miền Trung
Du lịch Thanh Hóa
Du lịch Nghệ An- Hà Tĩnh
Du lịch Đà Nẵng
Du lịch Thừa Thiên Huế
Du lịch Đà Lạt
Du lịch Nha Trang
Du lịch Quảng Bình
Du lịch Quy Nhơn – Phú Yên
Du lịch Các vùng khác
Du lịch Miền Nam
Du lịch Sài Gòn
Du lịch Phú Quốc
Du lịch Miền Tây
Du lịch Côn Đảo
Du lịch các vùng khác
Du lịch nước ngoài
Du lịch Hàn Quốc
Du lịch Nhật Bản
Du lịch Sing – Mã
Du lịch Thái Lan
Du Lịch Đài Loan
Du Lịch Trung Quốc
Du lịch các nước khác
Vé máy bay
Vé máy bay nội địa
Vé máy bay quốc tế
Dịch vụ khác
Xe du lịch
Visa xuất cảnh
Visa Hàn Quốc
Visa Nhật Bản
Visa Trung Quốc
Visa các nước khác
Khách sạn & Resort
Khuyến mại
Giới thiệu
Tin tức
TÌM KIẾM
Tiếng Việt
English
Tiếng Việt
Sign Up
Login
QualityTravelVN
Trang chủ
Du lịch trong nước
Du lịch Miền Bắc
Du lịch Hà Nội
Du lịch Ninh Bình
Du lịch Sapa – Hà Khẩu
Du lịch Hạ Long – Du lịch Cát Bà
Du lịch Đông Tây Bắc
Du lịch Đồng Bằng Sông Hồng
Du lịch Các vùng khác
Du lịch Miền Trung
Du lịch Thanh Hóa
Du lịch Nghệ An- Hà Tĩnh
Du lịch Đà Nẵng
Du lịch Thừa Thiên Huế
Du lịch Đà Lạt
Du lịch Nha Trang
Du lịch Quảng Bình
Du lịch Quy Nhơn – Phú Yên
Du lịch Các vùng khác
Du lịch Miền Nam
Du lịch Sài Gòn
Du lịch Phú Quốc
Du lịch Miền Tây
Du lịch Côn Đảo
Du lịch các vùng khác
Du lịch nước ngoài
Du lịch Hàn Quốc
Du lịch Nhật Bản
Du lịch Sing – Mã
Du lịch Thái Lan
Du Lịch Đài Loan
Du Lịch Trung Quốc
Du lịch các nước khác
Vé máy bay
Vé máy bay nội địa
Vé máy bay quốc tế
Dịch vụ khác
Xe du lịch
Visa xuất cảnh
Visa Hàn Quốc
Visa Nhật Bản
Visa Trung Quốc
Visa các nước khác
Khách sạn & Resort
Khuyến mại
Giới thiệu
Tin tức
Trang chủ
Du lịch nước ngoài
Du lịch Nhật Bản
Du lịch Nhật Bản
Phổ biến nhất
Mới nhất
Tin tiêu biểu
Phổ biến nhất
Xem nhiều theo tuần
Bằng Điểm Đánh Giá
Ngẫu nhiên
Du Lịch Nhật Bản Dịp Nghỉ Lễ 30/4 Và 1/5
20 Tháng Ba, 2018
Du Lịch Nhật Bản 4 Ngày 3 Đêm Ngắm Hoa Anh Đào
Bài viết mới
Du Lịch Campuchia Siemreap – Phnompenh 4 Ngày 3 Đêm
Du Lịch Hồng Kông 4 Ngày 3 Đêm Bay Hongkong Airlines
Du Lịch Myanmar 4 Ngày 3 Đêm Bay Vietjet Air
Du Lịch Trung Quốc: Bắc Kinh – Thượng Hải – Hàng...
Bài viết ngẫu nhiên
Du Lịch Hàn Quốc Gía Rẻ Tại Hà Nội
Trương Gia Giới – Phượng Hoàng Cổ Trấn Bay Nội Địa...
Du Lịch Giá Rẻ Nha Trang- Miền Cát Trắng
Tour Du Lịch Giá Rẻ Quy Nhơn – Phú Yên
Edit with Live CSS

WARC-Truncated: length

Server: LiteSpeed

Accept-Ranges: bytes

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

Set-Cookie: pll_language=vi; expires=Mon, 20-May-2019 10:06:45 GMT; Max-Age=31536000; path=/


markdown:
## DANH MỤC QUÀ TẾT
### HỘP QUÀ TẾT
### Giỏ quà tết 2019
- -
[Quà tết giá < 500k](danh-muc/Qua-tet-gia-<-500k.html)
- -
[Quà tết giá từ 500k - 1 triệu](danh-muc/Qua-tet-gia-tu-500k-1-trieu.html)
- -
[Quà tết giá từ 1tr - 1tr700](danh-muc/Qua-tet-gia-tu-1tr-1tr700.html)
- -
[Quà tết giá từ 1tr700 - 2tr500](danh-muc/289-Qua-tet-gia-tu-1tr700-2tr500.html)
- -
[Quà tết giá > 2tr500](danh-muc/Qua-tet-gia->-2tr500.html)
- -
[Giỏ quà tết cao cấp](danh-muc/315-Gio-qua-tet-cao-cap.html)
- -
[Giỏ Quà Sức Khỏe](danh-muc/Gio-Qua-Suc-Khoe.html)
### TÚI QUÀ TẾT
### Rượu - Trà - Cafe
- -
[Rượu Sake](danh-muc/304-ruou-sake.html)
- -
[Rượu vang](danh-muc/Ruou-vang.html)
- -
[Trà oolong](danh-muc/Tra-oolong.html)
- -
[Rượu tết](danh-muc/Ruou-tet.html)
- -
[Trà xanh](danh-muc/Tra-xanh.html)
### SẢN PHẨM ĐẶC BIỆT
### HỘP QUÀ
## LOẠI QUÀ BIẾU TẾT
# Giỏ quà tết 2018 - GQT024
![Giỏ quà tết 2018 - GQT024 Giỏ quà tết 2018 - GQT024](.//products/du-lich-viet-nam-251.png)
## Giỏ quà tết 2018 - GQT024
Giá: 2,580,000VNĐ
Tình trạng: còn hàng
Quý khách hàng có như câu mua và tư vấn
Tel: 08.6258 1056 - Fax: 08.6258 1057
[- Giỏ quà tết 2018 - GQT024 vui lòng liên hệ:](http://quatetonline.net) **quà tết**
Tel: 08.6258 1056 - Fax: 08.6258 1057
1. Chivas 12 750ml - scotland
2. Mơ khô DD Park 380g - Thổ Nhĩ Kỳ
3. Trà English tea shop 40g - Anh
4. Hạt điều Cashews 215g
5. Bánh Distinctive Assortment 376g - Mỹ
6. Chocolate Acor bon bon 255g - Mexico
7. Trà Olong hộp thiếc 60g
8. Café Tchibo Gold 100g - Đức
9. Nho Khô Organic Currants 210g - Úc
10. Thịt Cooked Ham 326g - Mỹ
11. Sinh tố Phúc bồn tử La Fresh 350ml
12. Chocolate dark Eichtti HT 250g - Đức
13. Kẹo hoa quả Kalfany - Đức
Giá:
**2.580.000 VND**
(chưa bao gồm 10% VAT)
** Hình ảnh chỉ mang tính chất minh họa*
## Sản phẩm khác
![Giỏ quà tết 2018 - GQT3920 Giỏ quà tết 2018 - GQT3920](.//products/du-lich-viet-nam-252.png)
![Giỏ quà tết 2018 - GQT3920 Giỏ quà tết 2018 - GQT3920](.//products/du-lich-viet-nam-252.png)
[Giỏ quà tết 2018 - GQT3920](san-pham/252-Gio-qua-tet-2015-GQT027.html)
Giá: 3,490,000VNĐ
![Giỏ quà tết 2018 - GQT024 Giỏ quà tết 2018 - GQT024](.//products/du-lich-viet-nam-251.png)
![Giỏ quà tết 2018 - GQT024 Giỏ quà tết 2018 - GQT024](.//products/du-lich-viet-nam-251.png)
[Giỏ quà tết 2018 - GQT024](san-pham/251-Gio-qua-tet-2015-GQT026.html)
Giá: 2,580,000VNĐ
![Giỏ quà Tết 2018 - GQT025 Giỏ quà Tết 2018 - GQT025](.//products/du-lich-viet-nam-204.png)
![Giỏ quà Tết 2018 - GQT025 Giỏ quà Tết 2018 - GQT025](.//products/du-lich-viet-nam-204.png)
[Giỏ quà Tết 2018 - GQT025](san-pham/204-Gio-qua-2014-GQT025.html)
Giá: 2,700,000VNĐ
![Giỏ quà tết 2018 - GQT026 Giỏ quà tết 2018 - GQT026](.//products/du-lich-viet-nam-203.png)
![Giỏ quà tết 2018 - GQT026 Giỏ quà tết 2018 - GQT026](.//products/du-lich-viet-nam-203.png)
[Giỏ quà tết 2018 - GQT026](san-pham/203-Gio-qua-2014-GQT024.html)
Giá: 2,600,000VNĐ
## Giỏ quà tết nổi bật
![Giỏ quà tết 2018 - GQT1030 Giỏ quà tết 2018 - GQT1030](.//products/du-lich-viet-nam-374.png)
![Giỏ quà tết 2018 - GQT1030 Giỏ quà tết 2018 - GQT1030](.//products/du-lich-viet-nam-374.png)
[Giỏ quà tết 2018 - GQT1030](san-pham/374-Gio-qua-tet-2018-GQT1030.html)
Giá: 1,030,000 VNĐ
![Giỏ quà tết 2018 - GQT1100 Giỏ quà tết 2018 - GQT1100](.//products/du-lich-viet-nam-375.png)
![Giỏ quà tết 2018 - GQT1100 Giỏ quà tết 2018 - GQT1100](.//products/du-lich-viet-nam-375.png)
[Giỏ quà tết 2018 - GQT1100](san-pham/375-Gio-qua-tet-2018-GQT1100.html)
Giá: 1,100,000 VNĐ
![Giỏ quà tết 2018 - GQT880 Giỏ quà tết 2018 - GQT880](.//products/du-lich-viet-nam-373.png)
![Giỏ quà tết 2018 - GQT880 Giỏ quà tết 2018 - GQT880](.//products/du-lich-viet-nam-373.png)
[Giỏ quà tết 2018 - GQT880](san-pham/373-Gio-qua-tet-2018-GQT880.html)
Giá: 880,000 VNĐ
![Túi quà tết 2018 - TQT012 Túi quà tết 2018 - TQT012](.//products/du-lich-viet-nam-360.png)
![Túi quà tết 2018 - TQT012 Túi quà tết 2018 - TQT012](.//products/du-lich-viet-nam-360.png)
[Túi quà tết 2018 - TQT012](san-pham/360-Tui-qua-tet-2018-TQT08.html)
Giá: 965,000 VNĐ
![Hộp Quà Tết - HQT020 Hộp Quà Tết - HQT020](.//products/du-lich-viet-nam-353.png)
![Hộp Quà Tết - HQT020 Hộp Quà Tết - HQT020](.//products/du-lich-viet-nam-353.png)
[Hộp Quà Tết - HQT020](san-pham/353-Hop-Qua-Tet-HQT19.html)
Giá: 1,500,000 VNĐ
![Hộp Quà Tết - HQT021 Hộp Quà Tết - HQT021](.//products/du-lich-viet-nam-354.png)
![Hộp Quà Tết - HQT021 Hộp Quà Tết - HQT021](.//products/du-lich-viet-nam-354.png)
[Hộp Quà Tết - HQT021](san-pham/354-Hop-Qua-Tet-HQT20.html)
Giá: 1,530,000 VNĐ
![Túi quà tết 2018 - TQT011 Túi quà tết 2018 - TQT011](.//products/du-lich-viet-nam-359.png)
![Túi quà tết 2018 - TQT011 Túi quà tết 2018 - TQT011](.//products/du-lich-viet-nam-359.png)
[Túi quà tết 2018 - TQT011](san-pham/359-Tui-qua-tet-2018-TQT07.html)
Giá: 870,000 VNĐ
![Giỏ quà tết 2018 - GQT011 Giỏ quà tết 2018 - GQT011](.//products/du-lich-viet-nam-277.png)
![Giỏ quà tết 2018 - GQT011 Giỏ quà tết 2018 - GQT011](.//products/du-lich-viet-nam-277.png)
[Giỏ quà tết 2018 - GQT011](san-pham/277-Gio-qua-Tet-2016-GQT010.html)
Giá: 750,000 VNĐ
![Giỏ quà tết 2018 - GQT03 Giỏ quà tết 2018 - GQT03](.//products/du-lich-viet-nam-183.png)
![Giỏ quà tết 2018 - GQT03 Giỏ quà tết 2018 - GQT03](.//products/du-lich-viet-nam-183.png)
[Giỏ quà tết 2018 - GQT03](san-pham/183-Gio-qua-tet-2014-GQT005.html)
Giá: 460,000 VNĐ
![Giỏ quà tết 2018 - GQT021 Giỏ quà tết 2018 - GQT021](.//products/du-lich-viet-nam-180.png)
![Giỏ quà tết 2018 - GQT021 Giỏ quà tết 2018 - GQT021](.//products/du-lich-viet-nam-180.png)
[Giỏ quà tết 2018 - GQT021](san-pham/180-Gio-qua-tet-2014-GQTM3001.html)
Giá: 1,850,000 VNĐ
![Giỏ quà Tết 2018 - GQT01 Giỏ quà Tết 2018 - GQT01](.//products/du-lich-viet-nam-178.png)
![Giỏ quà Tết 2018 - GQT01 Giỏ quà Tết 2018 - GQT01](.//products/du-lich-viet-nam-178.png)
[Giỏ quà Tết 2018 - GQT01](san-pham/178-Gio-qua-tet-2014-GQT003.html)
Giá: 430,000 VNĐ
## Tin tức
[Xu hướng chọn quà tết năm 2019](tu-van/Xu-huong-chon-qua-tet-nam-2019.html) [Mẹo Chọn quà cho dịp Tết Nguyên đán 2019](tu-van/Meo-Chon-qua-cho-dip-Tet-Nguyen-dan-2019.html) [Dạo quanh thị trường tết 2019](tu-van/Dao-quanh-thi-truong-tet-2019.html) [Rầm rộ trào lưu tự thiết kế lịch tết 2019 độc đáo](tu-van/Ram-ro-trao-luu-tu-thiet-ke-lich-tet-2019-doc-dao.html) [Các loại hoa mang đến may mắn vào dịp Tết](tu-van/Cac-loai-hoa-mang-den-may-man-vao-dip-Tet.html) [Ngày tết ở quê em](tu-van/Ngay-tet-o-que-em.html) [Phong tục đẹp ngày tết của người Việt](tu-van/Phong-tuc-dep-ngay-tet-cua-nguoi-Viet.html) [Những món quà tết ý nghĩa dành tặng bố mẹ](tu-van/Nhung-mon-qua-tet-y-nghia-danh-tang-bo-me.html) [Tết ý nghĩa của người Việt](tu-van/Tet-y-nghia-cua-nguoi-Viet.html)
## Chia sẻ liên kết
**QUÀ TẾT ONLINE** **CÔNG TY TNHH TM DV PT MINH AN** **181 Bùi Hữu Nghĩa, Phường 1, Quận Bình Thạnh, TPHCM** **Email: info@quatetonline.net**
Liên kết website:
[Cỏ nhân tạo khánh an](http://http://conhantaokhanhan.com/)| [Trung cấp mầm non](http://www.caodangmamnon.com/trung-cap-mam-non/)| [Cao đẳng sư phạm hà nội](http://caodangsuphamhanoi.com.vn/)| [Cao đẳng thú y hà nội](http://caodangthuyhanoi.edu.vn/)| [Trung cấp thú y](http://caodangthuyhanoi.edu.vn/trung-cap-thu-y)| [Thiết kế tiểu cảnh đẹp](http://thietketieucanhdep.com/)| [Máy lọc nước rosta](http://rostar.com.vn/)
Copyright © 2012

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

Vary: Accept-Encoding,User-Agent

Content-Type: text/html


markdown:
-
Micro shure hàng mỹ Ship về1 triệu 300
-
-
-
Dư dùng cần bán amply pma - 390IV .3 triệu 100
-
Ampli JARGUAR 203 iii đẹp 98% zin 100% ( Korea)6 triệu 550
-
Ampli DENON PMA- 390 lV Made in JAPAN Hay Quá!3 triệu 100
Giá:
300,000 đ
Liên hệ:
Minh Vm
Điện thoại:
Bộ loa sub vi tính thùng lớn, âm thanh 5.1 cực hay
Hướng dẫn giao dịch an toàn
- Không thanh toán tiền trước khi nhận hàng
- Kiểm tra hàng cẩn thận trước khi mua
- Giao dịch ở nơi công cộng
Tin mới đăng
-
[Yamaha Mio zin bstp víp chín chủ](http://raovatchotot.net/yamaha-mio-zin-bstp-vip-chin-chu.html)9 triệu 800Quận Bình Tân • 22 phút trước
-
Quận Bình Tân • 24 phút trước
-
[Đồng hồ op mới mua 3 ngày](http://raovatchotot.net/dong-ho-op-moi-mua-3-ngay.html)1 triệu 700Đắk Nông • 27 phút trước
-
[Samsung A5 2016 công ty dùng chống cháy ok](http://raovatchotot.net/samsung-a5-2016-cong-ty-dung-chong-chay-ok.html)1 triệu 200Quận Thanh Xuân • 29 phút trước
-
Quận Hoàn Kiếm • 31 phút trước

Server: cloudflare

X-Frame-Options: SAMEORIGIN