Tuesday, September 22, 2009

Kiến trúc Model-View-Presenter trong .NET

Trong các nền tảng lập trình hiện đại như .NET, khi các công cụ và kỹ thuật hỗ trợ lập trình giao diện người dùng (UI) ngày càng trở nên mạnh mẽ và tiện dụng thì người ta có xu hướng đưa nhiều xử lý bên ngoài vào các lớp UI. Kết quả là các UI chứa nhiều xử lý logic và dữ liệu mà lẽ ra nên tách rời thành từng phần riêng. Lý do của việc tách rời như sau:

• Trong một hệ thống, UI là thành phần có nhiều khả năng thay đổi nhất nên việc tách rời các UI giúp có thể thay đổi các UI này một cách độc lập mà không ảnh hưởng đến các thành phần xử lý khác. Đặc biệt việc tách rời dữ liệu khỏi UI còn cho phép ta có thể phát triển nhiều UI khác nhau cho các cách thể hiện khác nhau.

• Mã lệnh (code) xử lý đặt trong UI gây khó khăn cho việc kiểm tra (test). Việc kiểm tra các UI thường hoặc phải chạy ứng dụng thủ công hoặc sử dụng kịch bản (script) để thực hiện việc tương tác tự động lên các UI, do đó sẽ tốn nhiều chi phí và thời gian hơn để kiểm tra các xử lý bên trong thành phần này.

• Việc đưa nhiều xử lý vào các lớp UI còn dẫn đến khả năng trùng lắp code xử lý. Những xử lý lẽ ra có thể dùng chung thì lại xuất hiện lặp lại ở nhiều UI có chức năng tương tự nhau. Việc tách các xử lý này ra ngoài ra còn tăng tính tái sử dụng code và dễ bảo trì hơn.

Đây là các vấn đề cơ bản được đặt ra cho các hệ thống tương tác. Để giải quyết chúng, một số giải pháp được đề ra, trong đó phổ biến nhất là mẫu kiến trúc MVC (Model-View-Controller). Trong bài viết này, chúng ta sẽ khảo sát mẫu kiến trúc MVC cổ điển và một mẫu kiến trúc thừa kế từ nó, hiện được ứng dụng rộng rãi trong môi trường .NET, đó là kiến trúc Model-View-Presenter (MVP). Ý nghĩa của các thuật ngữ trong hình minh họa vui lòng xem "Giải thích các project" cuối bài.

Model-View-Controller cổ điển

MVC được hình thành bởi các nghiên cứu của Trygve Reenskaug vào khoảng các năm 1978-1979. Sau đó nó được điều chỉnh và được cài đặt lần đầu tiên vào các lớp của thư viện Xerox PARC Smalltalk-80. MVC cổ điển hiện tại ít được sử dụng trong môi trường lập trình desktop như trước đây, nhưng vẫn được sử dụng rộng rãi trong môi trường lập trình web.

Mẫu kiến trúc Model-View-Controller chia nhỏ các thành phần dữ liệu, thể hiện (output) và dữ liệu nhập từ người dùng (input) thành những thành phần riêng biệt.

Model chứa dữ liệu và các tính toán xử lý logic để giải quyết vấn đề mà phần mềm hướng tới (business logic). Thành phần model thường được trình bày ở dạng Domain Model.

View là thành phần đảm nhận việc thể hiện những dữ liệu của Model. View bao gồm những gì thể hiện trên màn hình như các control, form... Trên cùng một Model, có thể có nhiều View.

Controller là thành phần đảm nhận việc xử lý đáp trả lại các dữ liệu được đưa vào từ người dùng như các sự kiện chuột, bàn phím, các tương tác lên các control... Controller là cầu nối giữa người dùng và ứng dụng.

Mục đích chính của MVC là tách rời phần thể hiện và các xử lý bên trong. Trong nhiều môi trường lập trình hiện đại, nhiều xử lý sự kiện cơ bản đã được hỗ trợ sẵn nên thành phần Controller không còn quan trọng nữa.

Trong khi đó, những cơ chế như Observer Pattern được dùng như phương tiện hiệu quả để loại bỏ sự phụ thuộc của Model vào các thành phần khác, có một vấn đề lớn là tại một thời điểm, chúng ta khó có thể xác định điều gì sẽ xảy ra bằng cách đọc code và việc kiểm tra cũng khó khăn hơn.

Ngoài ra còn những vấn đề khác như lưu trữ tình trạng hiện tại của UI... Vì vậy MVC sau này đã có những thay đổi và bổ sung nhất định. Kiến trúc MVP chúng ta sẽ bàn dưới đây cũng dựa trên tư tưởng cơ bản của MVC nhưng với cách tiếp cận khác nhằm khắc phục các hạn chế của MVC cổ điển.

Mẫu Dolphin Smalltalk Model-View-Presenter

Phiên bản Dolphin Smalltalk Model-View-Presenter (gọi tắt là Dolphin MVP) là phiên bản của MVP được xây dựng dựa trên phiên bản Taligent MVP xuất hiện trước đó. Dolphin MVP được xây dựng về cơ bản bên ngoài tương tự như MVC cổ điển nhưng khác nhau ở vai trò của Controller và Presenter.

Mẫu kiến trúc Dolphin Smalltalk Model-View-Presenter chia ứng dụng thành các phần dữ liệu, thể hiện (presentation) và xử lý logic thuộc phần thể hiện (presentation logic).

Trong mẫu Passive View, thành phần View được loại bỏ hoàn toàn các xử lý logic và tương tác đến Model. Thay vì vậy, nó chuyển giao các xử lý cho Controller đảm trách. Controller đảm nhận tương tác đến Model và cập nhật View khi có thay đổi từ Model. Controller là thành phần trung gian liên lạc giữa View và Model.

Trong mẫu Supervising Controller, View đầu tiên bắt lấy các sự kiện và sau đó chuyển giao cho Controller xử lý. Để cập nhật thay đổi từ Model, View dùng data-binding và Observer Pattern cho các xử lý đơn giản còn đối với các xử lý phức tạp sẽ nhờ đến Controller.

So với Supervising Controller có View đảm nhận xử lý sự kiện đơn giản, với Passive View thành phần View được tách rời hoàn toàn khỏi các xử lý, kể cả các xử lý cơ bản ở mức giao diện cũng được giao hoàn toàn cho Controller. Điều này tạo thuận lợi hơn cho việc kiểm tra vì khi đó các thành phần Model và Controller có thể được kiểm tra một cách độc lập mà không phụ thuộc vào giao diện. Phiên bản MVP của Microsoft đầu tiên được xây dựng dựa trên Passive View, sau đó mẫu Supervising Controller cũng được hỗ trợ với một số điều chỉnh.

Phiên bản MVP của Microsoft

Khởi đầu từ các framework Smart Client Software Factory và Web Client Software Factory dựa trên kiến trúc MVP được các nhóm nghiên cứu của Microsoft tạo ra từ năm 2006, Microsoft sau đó bắt đầu đưa MVP vào tài liệu hướng dẫn và ví dụ về lập trình giao diện trong .NET framework. Mô tả dưới đây dựa trên phiên bản MVP được mô tả trong tạp chí MSDN vào năm 2006 (tham khảo 2) và có thể xem là kiến trúc cơ bản cho các framework trên. Ngoài ra, còn có một số framework MVP khác cũng được phát triển trên nền tảng .NET như MVC# hay NMVP.

Xin lưu ý là phiên bản cũ của Web Client Software Factory ban đầu được tổ chức dựa trên Passive View (cấu trúc bên dưới) nhưng với phiên bản hiện tại thì cấu trúc dựa trên Supervising Controller cũng được hỗ trợ.

Các thành phần

Model chứa dữ liệu và các tính toán xử lý logic để giải quyết vấn đề mà phần mềm hướng tới.

View là thành phần đảm nhận việc thể hiện những dữ liệu của Model và là tổng hợp của các form, control được sử dụng.

Presenter là thành phần đảm nhận các xử lý thể hiện cũng như tương tác đến dữ liệu bên dưới và có thể tương tác để thay đổi View trong quá trình xử lý.

Phối hợp các thành phần

Mẫu kiến trúc MVP của Microsoft tương tự như Passive View nhưng có bổ sung ràng buộc là Presenter chỉ có thể truy cập đến View thông qua interface IView. Điều này giúp Presenter không phụ thuộc đến cài đặt cụ thể của View và có thể dễ dàng kiểm tra Presenter một cách độc lập. Chúng ta có thể dùng kỹ thuật "Mock" để thay thế các xử lý cụ thể của View khi kiểm tra Presenter. Ngoài ra, mối quan hệ giữa Presenter và Model là quan hệ một chiều (chiều còn lại là gián tiếp). Hệ quả là chúng ta có một mô hình đa lớp như cấu trúc ở trên theo ý nghĩa các thành phần ở một lớp chỉ phụ thuộc và sử dụng các thành phần ở lớp ngay bên dưới nó.

Theo mẫu Microsoft MVP, một View gắn liền với một interface IView. Khi View được tạo ra, nó tạo ra một đối tượng private Presenter và gắn nó vào đối tượng này thông qua IView. Khi một sự kiện xảy ra, View bắt lấy và sau đó kích hoạt một phương thức của Presenter mà sau đó có thể tương tác với Model. Một số sự kiện như bắt đầu hiển thị và đóng của View cũng được gửi tới để Presenter kích hoạt một số phương thức tương ứng, điều này giúp cho một số công việc như khởi tạo và giải phóng dữ liệu cho View được dễ dàng hơn.

Model theo Microsoft MVP cũng thường được tổ chức bổ sung một lớp Service nằm bên trên để tương tác với Presenter, qua đó giảm bớt sự phụ thuộc đến các xử lý dữ liệu sâu bên dưới. Ngoài ra, để điều khiển việc liên lạc giữa các View hay các Presenter, một thành phần thường được bổ sung gọi là Application Controller. Trong một ứng dụng có thể có nhiều Application Controller để quản lý các nhóm MVP. Ngoài ra, Application Controller có thể đảm trách việc tương tác với Model, thay vì sử dụng Presenter.

Ví dụ minh họa

Để minh họa mẫu Microsoft MVP, chúng ta sẽ cùng khảo sát một ví dụ đơn giản: tạo một form hiển thị danh sách sinh viên cùng chức năng thêm mới vào danh sách đó. Với mục tiêu minh họa cách tổ chức và liên kết giữa các thành phần, chúng ta không đi sâu vào cài đặt cụ thể (bạn có thể tham khảo source code đi kèm bài viết, source code được tổ chức ở dạng project của VS 2008).

Ứng dụng được tổ chức thành 5 project: View, Presenter, DataService, Model và DataTransferObject. Trong đó, View là ứng dụng còn các project khác là thư viện. Các project phụ thuộc lẫn nhau theo thứ tự project phía trước sử dụng trực tiếp project phía sau, ngoại trừ DataTransferObject chứa các loại dữ liệu được dùng chung cho 3 project View, Presenter và DataService. Model là project chứa các tương tác trực tiếp đến dữ liệu và không phụ thuộc vào bất cứ thành phần nào khác.

Giải thích các project:

- Model: Chứa dữ liệu giả lập (StudentData.xml), schema (StudentDataSet.xsd) và lớp tiện ích được xây dựng bên trên (DataAccess.cs).

- DataTransferObject: Chứa đối tượng dữ liệu được dùng chung cho các project ở mức cao hơn (Student.cs).

- DataService: được xây dựng bên trên Model, chuyển đổi dữ liệu từ Model sang DataTransferObject và xây dựng các tiện ích bên trên đối tượng transfer này (Service.cs).

- Presenter: Chứa interface của View dùng cho Presenter truy cập (IViewForm) và lớp Presenter (StudentPresenter).

- View: Chứa form view (ViewForm.cs) và Program.cs.

Trong bài viết khác, chúng ta sẽ tìm hiểu phương pháp TTD (Test-driven development) và ứng dụng nó để phát triển ứng dụng theo mẫu Microsoft MVP trong môi trường .NET.

Code

Tài liệu tham khảo

1. Martin Fowler, GUI Architectures
2. Jean-Paul Boodhoo, Design Patterns: Model-View-Presenter
3. Buschmann F., Meunier R., Rohnert H. & Sommerlad P. & Stal M. (1996). Pattern-Oriented Software Architecture: A System of Patterns.
4. Martin Fowler, Patterns of Enterprise Application Architecture.
5. http://en.wikipedia.org
6. Derek Greer, Interactive application architecture patterns
7. Views Testability Guidance
8. Dolphin MVP paper

Võ Hồng Vinh
Email: dakurai@gmail.com

(Theo PCworld)

Sunday, August 30, 2009

10 điều lãng phí nhất

Trong hành trình tạo dựng một cuộc đời có ý nghĩa, nếu bạn lỡ coi thường một trong 10 điều thiết yếu dưới đây, coi như bạn đã tự đánh mất một phần nhựa sống của chính mình.


1. Sức khoẻ:
Lúc còn trẻ, người ta thường ỷ lại vào sức sống tràn trề đang có. Họ làm việc như điên, vui chơi thâu đêm, ăn uống không điều độ... Cứ như thế, cơ thể mệt mỏi và lão hoá nhanh. Khi về già, cố níu kéo sức khoẻ thì đã muộn.

2. Thời gian:
Mỗi thời khắc "vàng ngọc" qua đi là không bao giờ lấy lại được. Vậy mà không hiếm kẻ nếm 8 giờ làm việc qua cửa sổ. Mỗi ngày, hãy nhìn lại xem mình đã làm được điều gì. Nếu câu trả lời là "không", hãy xem lại quỹ thời gian của bạn nhé.

3. Tiền bạc:
Nhiều người hễ có tiền là mua sắm, tiêu xài hoang phí trong phút chốc. Đến khi cần một số tiền nhỏ, họ cũng phải đi vay mượn. Những ai không biết tiết kiệm tiền bạc, sẽ không bao giờ sở hữu được một gia tài lớn.

4. Tuổi trẻ:
Là quãng thời gian mà con người có nhiều sức khoẻ và trí tuệ để làm những điều lớn lao. Vậy mà có người đã quên mất điều này. "Trẻ ăn chơi, già hối hận" là lời khuyên dành cho những ai phí hoài tuổi thanh xuân cho những trò vô bổ.

5. Không đọc sách:
Sách truyền bá văn minh. Không có sách, lịch sử im lặng, văn chương câm điếc, khoa học tê liệt, tư tưởng và suy xét ứ đọng. Từ sách, bạn có thể khám phá biết bao điều kỳ thú trên khắp thế giới. Thật phí "nửa cuộc đời" cho nhưng ai chưa bao giờ biết đọc sách là gì.

6. Cơ hội: Cơ hội là điều không dễ dàng đến với chúng ta trong đời. Một cơ may có thể biến bạn thành giám đốc thành đạt hay một tỷ phú lắm tiền. Nếu thờ ơ để vận may vụt khỏi tầm tay, bạn khó có thể tiến về phía trước.

7. Nhan sắc:
Là vũ khí lợi hại nhất của phụ nữ. Có nhan sắc, bạn sẽ tự tin và chiếm được nhiều ưu thế hơn so với người khác. Tuy nhiên, "tuổi thọ" của nhan sắc có hạn. Thật hoang phí khi để sắc đẹp xuống dốc. Hãy chăm sóc mình ngay từ bây giờ.

8. Sống độc thân:
Phụ nữ ngày nay theo trào lưu "chủ nghĩa độc thân". Thực tế là khi sống một mình, bạn rất cô đơn và dễ cảm thấy thiếu vắng vòng tay yêu thương của chồng con. Bận bịu gia đình chính là một niềm vui. Sống độc thân, bạn đã lãng phí tình cảm đẹp đẽ ấy.

9. Không đi du lịch:
Một vĩ nhân đã từng nói: "Khi đi du lịch về, con người ta lớn thêm và chắc chắn một điều là trái đất phải nhỏ lại". Vì thế, nếu cho rằng đi du lịch chỉ làm hoang phí thời gian và tiền bạc, bạn hãy nghĩ lại nhé!

10. Không học tập:
Một người luôn biết trau dồi kiến thức sẽ dễ thành công hơn người chỉ biết tự mãn với những gì mình biết. Nếu không học hành, bạn đang lãng phí bộ óc đấy.

Kynangmem.com

Làm sao để vượt qua con thỏ đế???

Bạn đã từng bỏ qua rất nhiều cơ hội đáng giá mà người khác hằng ao ước. Nguyên nhân đơn giản chỉ vì bạn không tin tưởng vào khả năng của mình hoặc bạn quá nhút nhát, không dám đối mặt với thử thách và khó khăn.
Những biện pháp sau sẽ giúp bạn khắc phục tính nhút nhát của mình.

Mở rộng quan hệ, tiếp xúc với nhiều người. Bạn đừng nên suốt cả ngày phải đối diện với sách báo hoặc tivi chỉ vì bạn sợ tiếp xúc với người khác. Hãy tiếp xúc, nói chuyện với nhiều người, từ những người hàng xóm hoặc bất kỳ một người nào đó bạn gặp trên xe buýt hay siêu thị, cùng bàn luận về một vấn đề hay một món hàng nào đó.

Hãy ra ngoài nhiều hơn, bạn sẽ thấy được mọi người rất thân thiện và không có gì để bạn phải sợ tiếp xúc với họ.

Trong một buổi tiệc, bạn không dám nói một tiếng nào, không phải bạn không có kiến thức về lĩnh vực mà mọi người đang thảo luận mà bạn sợ rằng ý kiến của mình không được mọi người tán đồng hoặc bạn nghĩ rằng ý kiến của mình không có gì đặc biệt và ai cũng có thể nghĩ ra.

Trái lại, nếu bạn cho rằng ý kiến của họ hay thì tại sao bạn không cho rằng họ sẽ nghĩ rằng ý kiến của bạn cũng rất hay. Do đó, bạn hãy tự tin nói ra ý kiến và đừng bao giờ đánh giá thấp năng lực của mình.

Nếu bạn không quen tiếp xúc với nhiều người thì hãy tập cách nói chuyện với trẻ con, những người thân trong gia đình, những người bạn đồng nghiệp. Khi đã tạo cho mình một phong cách giao tiếp thì bạn có thể mạnh dạn hơn khi tiếp xúc với nhiều người khác.

Bạn nên tìm cho mình những người bạn thân từ các đồng nghiệp. Có được sự ủng hộ và giúp đỡ của họ, bạn sẽ có được sự tự tin hơn trong hành động của mình. Đặc biệt nếu bạn thân của bạn là những người dạn dĩ thì bạn cũng sẽ học hỏi ở họ một số điều và sự dạn dĩ ấy sẽ lấn át đi một phần tính nhút nhát của bạn.

Thành lập cho mình một mục tiêu và quyết tâm phải đạt được. Lòng khát khao của bạn về kết quả mong muốn sẽ giúp bạn vượt qua những khó khăn do tính nhút nhát gây ra. Chẳng hạn như, bạn đặt ra mục tiêu phải có được 30 khách hàng trong tháng này. Và bạn phải làm những việc mà bạn chưa từng nghĩ tới. Lòng nhiệt thành và quyết tâm của bạn sẽ làm tan biến sự nhút nhát.

Hãy luôn luôn suy nghĩ rằng “ Không có gì phải sợ”. Nếu sự nhút nhát còn tồn tại trong người bạn thì bạn sẽ chẳng bao giờ thành công. Bạn đã từng ngưỡng mộ sự bản lĩnh của những người thành công? Họ luôn mang tư tưởng dám nghĩ, dám nói và dám làm. Nếu bạn muốn đạt được kết quả như họ thì hãy tập cho mình tính dám làm những gì nên làm.

Kynangmem.com

Wednesday, December 17, 2008

Thành công & thất bại

Sự khác biệt giữa thành công và thất bại:

Người thành công biết chính xác những gì mình muốn, tin tưởng vào khả năng của mình và sẵn sàng cống hiến hết thời gian của cuộc đời để đạt được điều đó.

Người thất bại không có mục đích cụ thể cho cuộc sống, luôn tin rằng mọi thành công đều là kết quả của vận may và chỉ thật sự bắt tay vào việc khi có sự tác động từ bên ngoài.

Người thành công có khả năng ảnh hưởng đến những người xung quanh và hợp tác với họ trong thái độ thân thiện.

Người thất bại tìm thấy khuyết điểm của mình ở người khác.

Người thành công chỉ bày tỏ ý kiến về những điều mình biết và họ hoàn toàn có thể thực hiện điều đó một cách rất khôn ngoan.

Người thất bại phát biểu ý kiến về mọi vấn đề mà họ chỉ biết chút ít hoặc hoàn toàn không có một chút kiến thức gì về chúng.

Người thành công dung hoà quan hệ với tất cả mọi người mà không quan tâm đến lợi ích đạt được.

Người thất bại chỉ nuôi dưỡng quan hệ với những ai mà từ đó họ sẽ có những thứ mà họ muốn.

Người thành công luôn trau dồi kiến thức và mở rộng lòng khoan dung. Họ sống hướng đến quyền lợi chung của cộng đồng.

Người thất bại có trí tuệ hạn chế, sự vị kỷ chiến thắng lòng vị tha. Vì vậy họ tách khỏi những cơ hội thuận lợi và mối quan hệ thân thiện với xã hội.

Người thành công theo kịp thời đại và xem đây là một trách nhiệm quan trọng để biết được điều gì đang diễn ra.

Người thất bại chỉ quan tâm đến bản thân với những nhu cầu trước mắt và bất chấp mọi thứ để thực hiện, không cần biết đó là điều tốt hay xấu.

Chỉ số PQ: viên ngọc giúp bạn tỏa sáng

Bạn tự hào là người có chỉ số thông minh IQ cao. Nhưng theo các nhà khoa học, nếu có chỉ số đam mê PQ (Passion Quotient) thấp, bạn sẽ khó mà thành công. Sự đam mê là ngọn lửa thổi bùng lên lòng nhiệt huyết, khiến mỗi chúng ta không ngừng khám phá những tiềm năng vô tận ẩn sâu trong mỗi con người.

Chuyện kể rằng… một người đàn ông nọ tìm thấy một quả trứng chim đại bàng, nhưng không biết nên đã đặt nó vào ổ gà mái đang trong thời kỳ ấp trứng. Chim đại bàng con cùng nở ra và lớn lên với đàn gà con. Từ nhỏ cho đến lớn, con đại bàng con đều làm những việc mà những con gà thực thụ làm và luôn nghĩ mình là con gà không hơn không kém: nó đào đất tìm giun và côn trùng, kêu cục tác, cũng vỗ cánh và bay được một ít trên không trung.

Năm tháng trôi qua, con “đại bàng-gà” cũng đã trưởng thành. Một ngày đẹp trời nọ, nó nhìn lên bầu trời và thấy một con chim rất đẹp, dũng mãnh lướt đi trong gió. Nó ngước nhìn con chim đang bay đầy vẻ kính sợ, và hỏi những con gà quanh đó “Ai đấy?” “Đó là chim đại bàng, chúa tể của các loài chim.”, một trong những con gà trả lời. “Ông ấy thuộc về bầu trời, còn chúng ta thuộc về mặt đất – vì chúng ta là gà.”

Và như thế, con chim đại bàng đã cam chịu với số phận của mình, nó đã sống và chết như một con gà, vì nó luôn nghĩ mình chỉ là một con gà mà thôi.

Thiếu sót lớn nhất trong cuộc đời con “đại bàng-gà” này chính là niềm say mê khám phá bản thân. Nó chưa bao giờ mơ ước được bay và chưa bao giờ học bay để có thể tự tin bay vút lên trời xanh như tổ tiên ngàn đời của mình.

PQ (Passion Quotient) là gì?
PQ là chỉ số chỉ sự say mê của mỗi người dành cho việc anh ta làm, gọi tắt là chỉ số say mê (PQ).

Có người đã ví von rằng: “Chỉ số IQ giống như một đoạn mạch ADN rất vững chắc và rất khó để cải thiện. Còn chỉ số PQ là chất lửa trong mỗi con người, chúng ta hoàn toàn có thể điều chỉnh được ngọn lửa đó.”

Chỉ số PQ của con người không thể đo lường một cách chính xác. PQ không thể hiển thị dưới dạng con số hay thống kê như IQ, nó chỉ mang tính ước đoán, hàm ý và tượng trưng.

Người có chỉ số PQ cao là một tài sản quý
Trong công việc, những nhân viên làm việc với lòng say mê cao là những người được các sếp quý trọng. Ngọn lửa say mê đến từ định hướng đúng trong công việc, chọn nghề phù hợp với năng lực và sở trường, vào trí thông minh của mỗi người. Những người có chỉ số PQ cao bao giờ cũng là tài sản quý của một cơ quan, tổ chức. Những phẩm chất thường thấy ở họ là:

- Yêu thích công việc mình làm.
- Luôn toàn tâm toàn ý hoàn thành công việc đạt chất lượng cao.
- Thất bại chỉ kích thích họ suy nghĩ thêm thấu đáo, chứ không làm họ nản chí.
- Họ làm việc không kể giờ giấc, hay ít ra cũng thường xuyên suy nghĩ về công việc ngay cả trong lúc nghỉ ngơi, nên họ thường tìm ra được những giải pháp độc đáo và sáng tạo.
- Họ luôn luôn nghĩ đến việc sẽ làm tiếp theo và tìm cách chạy đua với thời gian.

Virender Kapoor, tác giả quyển sách "The Greatest Secret of Success: Your Passion Quotient" (Bí mật lớn nhất của thành công: chỉ số say mê) cho rằng "Chất lửa trong con người, hay chính là chỉ số say mê, đã đóng góp rất nhiều cho những thành tựu kỳ diệu của nhà khoa học thiên tài Albert Einstein hơn cả chỉ số IQ của ông."