Thứ Năm, 29 tháng 12, 2011

Xây dựng bảy thói quen tốt về hướng đối tượng trong PHP


Trong những ngày đầu của lập trình PHP, mã PHP đã bị giới hạn là ngôn ngữ theo thủ tục về bản chất. Mã theo thủ tục(Procedural code) mô tả cách sử dụng các thủ tục cho các khối xây dựng của ứng dụng. Các thủ tục cung cấp một mức tái sử dụng nhất định khi cho phép các thủ tục được gọi bởi các thủ tục khác.
Tuy nhiên, dù không có các kết cấu của ngôn ngữ hướng đối tượng, một lập trình viên vẫn có thể đưa thêm các đặc trưng OO vào trong mã PHP. Sẽ có một chút khó khăn hơn và có thể làm cho mã khó đọc hơn bởi vì nó pha trộn các mẫu (ngôn ngữ theo thủ tục với thiết kế OO giả). Các kết cấu OO trong mã PHP — như là khả năng định nghĩa và sử dụng các lớp, khả năng xây dựng các mối quan hệ giữa các lớp có sử dụng quyền thừa kế và khả năng định nghĩa các giao diện — sẽ làm cho việc xây dựng mã tuân thủ các thói quen thực hành OO tốt dễ dàng hơn nhiều.
Trong khi các thiết kế theo thủ tục thuần túy không có nhiều tính mô đun vẫn chạy tốt, các lợi thế của thiết kế OO sẽ xuất hiện trong khâu bảo trì. Bởi vì một ứng dụng điển hình sẽ dành rất nhiều thời gian sống của nó cho việc bảo trì, bảo trì mã có chi phí rất cao trong suốt cuộc đời của một ứng dụng. Nó cũng có thể dễ dàng bị bỏ quên trong lúc phát triển. Nếu bạn đang trong một cuộc đua để làm cho ứng dụng của bạn được phát triển và triển khai, tính dễ bảo trì về dài hạn có thể tạm lùi xuống ghế sau, hãy để cho một cái gì đó bắt đầu hoạt động đã.
Tính mô đun (Modularity) — một trong những đặc trưng then chốt của thiết kế OO tốt — giúp cho việc bảo trì này. Tính mô đun giúp bao gói các thay đổi, sẽ làm cho mở rộng và sửa đổi ứng dụng theo thời gian dễ dàng hơn.
Trong khi có nhiều hơn bảy thói quen để xây dựng phần mềm OO về tổng thể, bảy thói quen sau đây là những gì bạn cần để làm cho mã của bạn phù hợp với các tiêu chuẩn thiết kế OO cơ bản. Chúng cho bạn một nền tảng vững chắc nhờ đó bạn có thể bổ sung thêm các thói quen OO và xây dựng phần mềm dễ dàng được bảo trì và được mở rộng. Các thói quen nhắm tới một số trong các đặc trưng then chốt của tính mô đun. Để biết thêm thông tin về lợi ích của thiết kế OO, độc lập với ngôn ngữ, xem Tài nguyên.
Bảy thói quen tốt về OO trong PHP là:
  1. Hãy khiêm tốn.
  2. Hãy là một láng giềng tốt.
  3. Tránh nhìn vào Medusa.
  4. Giữ vững nguyên tắc liên kết yếu nhất.
  5. Bạn là cao su, tôi là keo dán.
  6. Duy trì một gia đình.
  7. Nghĩ đến các mẫu.
Hãy khiêm tốn là để tránh tự trưng mình ra trong triển khai thực hiện các lớp và các hàm của bạn. Việc che giấu thông tin là một thói quen cơ bản. Bạn sẽ có một thời gian khó khăn để xây dựng bất kỳ các thói quen nào khác, cho đến khi bạn đã tập được thói quen che giấu các chi tiết triển khai thực hiện của bạn. Che giấu thông tin cũng được gọi là sự bao gói (encapsulation).
Có rất nhiều lý do tại sao trực tiếp để lộ ra các trường công cộng là một thói quen xấu. Điều quan trọng nhất trong số đó là nó không để lại cho bạn một tùy chọn nào nếu một cái gì đó trong triển khai thực hiện của bạn thay đổi. Bạn sử dụng các khái niệm OO để cô lập sự thay đổi và việc bao gói đóng một vai trò không thể thiếu được trong việc bảo đảm rằng bất kỳ sự thay đổi nào mà bạn thực hiện không phải là một kiểu virút trong tự nhiên. Những thay đổi kiểu Virút là những thay đổi bắt đầu là nhỏ — giống như việc thay đổi một mảng chứa ba phần tử thành chỉ chứa có hai. Đột nhiên, bạn nhận thấy rằng bạn đang thay đổi càng ngày càng nhiều mã của bạn để thích nghi với một thay đổi lẽ ra là không đáng kể.
Một cách đơn giản để bắt đầu che giấu thông tin của bạn là giữ các trường riêng tư (private) và chỉ để lộ chúng thông qua các hàm truy cập công cộng, giống như các cửa sổ trong nhà bạn. Thay vì có toàn bộ cả một bức tường mở toang ra bên ngoài, thì bạn chỉ có một hoặc hai cửa sổ. (Tôi nói thêm về hàm truy cập công cộng trong "Thói quen tốt: Sử dụng hàm truy cập công cộng").
Ngoài việc cho phép các triển khai thực hiện của bạn diễn ra sau bức màn đối với các thay đổi, việc sử dụng những hàm truy cập công cộng thay vì trực tiếp để lộ các trường cho phép bạn xây dựng thêm dựa trên triển khai thực hiện nền tảng của bạn bằng cách đè lên (overriding) triển khai thực hiện của một hàm truy cập để làm một cái gì đó hơi khác với hành vi ứng xử của cha mẹ. Nó cũng cho phép bạn xây dựng một triển khai thực hiện trừu tượng (abstract) để trì hoãn việc triển khai thực hiện thực tế các lớp đè lên nền tảng đã có.
Trong ví dụ mã xấu trong Liệt kê 1, các trường của các đối tượng Person được lộ ra trực tiếp như là các trường công cộng thay vì qua các hàm truy cập. Trong khi hành vi này rất cám dỗ, đặc biệt là cho các đối tượng dữ liệu ít quan trọng, thì nó lại hạn chế bạn.

Liệt kê 1. Thói quen xấu về việc để lộ các trường công cộng
<?php
class Person
{
    public $prefix;
    public $givenName;
    public $familyName;
    public $suffix;
}

$person = new Person();
$person->prefix = "Mr.";
$person->givenName = "John";

echo($person->prefix);
echo($person->givenName);

?>

Nếu có bất kỳ điều gì thay đổi với một đối tượng, bất kỳ mã nào sử dụng nó cũng cần phải thay đổi theo. Ví dụ, nếu họ, tên, tên đệm của một người đã được bao bọc trong một đối tượng PersonName, bạn sẽ cần phải sửa đổi tất cả các mã của bạn cho phù hợp với sự thay đổi đó.
Bằng cách sử dụng các thói quen OO tốt (xem Liệt kê 2), cùng một đối tượng bây giờ có các trường riêng tư thay cho các trường công cộng và các trường riêng tư được trưng ra một cách thận trọng với thế giới bên ngoài bằng các phương thức get và setcông cộng, được gọi là những hàm truy cập (accessors). Những hàm truy cập bây giờ cung cấp một cách công cộng để nhận thông tin từ lớp PHP của bạn sao cho nếu có thay đổi gì trong các triển khai thực hiện của bạn, thì ít có khả năng là bạn cần phải thay đổi tất cả các mã đã sử dụng lớp ấy.

Liệt kê 2. Thói quen tốt sử dụng những hàm truy cập công cộng
<?php
class Person
{
    private $prefix;
    private $givenName;
    private $familyName;
    private $suffix;
    
    public function setPrefix($prefix)
    {
        $this->prefix = $prefix;
    }
    
    public function getPrefix()
    {
        return $this->prefix;
    }
    
    public function setGivenName($gn)
    {
        $this->givenName = $gn;
    }
    
    public function getGivenName()
    {
        return $this->givenName;
    }
    
    public function setFamilyName($fn)
    {
        $this->familyName = $fn;
    }
    
    public function getFamilyName() 
    {
        return $this->familyName;
    }
    
    public function setSuffix($suffix)
    {
        $this->suffix = $suffix;
    }
    
    public function getSuffix()
    {
        return $suffix;
    }
    
}

$person = new Person();
$person->setPrefix("Mr.");
$person->setGivenName("John");

echo($person->getPrefix());
echo($person->getGivenName());

?>

Thoạt nhìn điều này có vẻ sẽ thêm nhiều công việc hơn và có thể thực sự là nhiều việc hơn ở mặt trước. Tuy nhiên, thường việc áp dụng thói quen OO tốt sẽ được đền bù lại trong lâu dài về sau, bởi vì các thay đổi trong tương lai được củng cố chắc chắn.
Trong phiên bản mã được hiển thị trong Liệt kê 3, tôi đã thay đổi việc triển khai thực hiện bên trong để sử dụng một mảng kết hợp cho các phần của tên. Lý tưởng ra, phải có nhiều xử lý lỗi hơn và kiểm tra cẩn thận hơn xem phần tử đó có tồn tại không, nhưng mục đích của ví dụ này là để cho thấy làm thế nào để các mã sử dụng lớp của tôi không cần phải thay đổi — thật hạnh phúc là nó không biết được về sự thay đổi lớp của tôi. Hãy nhớ rằng lý do để chấp nhận các thói quen OO là bao gói cẩn thận các thay đổi để cho mã của bạn có khả năng mở rộng hơn và dễ bảo trì hơn.

Liệt kê 3. Một sửa đổi khác theo thói quen tốt này với việc triển khai thực hiện bên trong khác đi
<?php
class Person
{
    private $personName = array();
    
    public function setPrefix($prefix)
    {
        $this->personName['prefix'] = $prefix;
    }
    
    public function getPrefix()
    {
        return $this->personName['prefix'];
    }
    
    public function setGivenName($gn)
    {
        $this->personName['givenName'] = $gn;
    }
    
    public function getGivenName()
    {
        return $this->personName['givenName'];
    }

    /* etc... */
}

/*
 * Even though the internal implementation changed, the code here stays exactly
 * the same. The change has been encapsulated only to the Person class.
 */
$person = new Person();
$person->setPrefix("Mr.");
$person->setGivenName("John");

echo($person->getPrefix());
echo($person->getGivenName());

?>

Khi bạn xây dựng một lớp, nó cần xử lý lỗi riêng của mình một cách thích hợp. Nếu lớp không biết làm thế nào để xử lý các lỗi, nó cần gói chúng theo một định dạng mà người gọi nó hiểu được. Ngoài ra, tránh trả về các đối tượng không tồn tại (null) hay trong trạng thái không hợp lệ. Nhiều trường hợp, bạn có thể làm điều này đơn giản bằng cách kiểm tra các đối số và đưa ra các ngoại lệ cụ thể để nói lý do tại sao các đối số được cung cấp không hợp lệ. Khi bạn xây dựng thói quen này, nó có thể tiết kiệm cho bạn — và những người đang bảo trì mã của bạn hoặc đang sử dụng các đối tượng của bạn — rất nhiều thời gian.
Xem xét ví dụ hiển thị trong Liệt kê 4, trong đó chấp nhận một số đối số và trả về một đối tượng Person với một số các giá trị đã được điền vào. Tuy nhiên, trong phương thức parsePersonName() không có xác nhận hợp lệ để xem liệu biến $val được cung cấp là bằng null, là một chuỗi ký tự có chiều dài bằng không hay là một chuỗi ký tự mà khuôn dạng sai, không phân giải được. Phương thức parsePersonName() không trả về một đối tượng Person mà trả về null. Các quản trị viên hoặc các lập trình viên sử dụng phương thức này có thể phải vò đầu bứt tai và — ít nhất cũng là — đi đến chỗ phải bắt đầu thiết lập các điểm ngắt và gỡ rối kịch bản lệnh PHP.

Liệt kê 4. Thói quen xấu không đưa ra hay không xử lý các lỗi 
class PersonUtils
{
    public static function parsePersonName($format, $val)
    {
        if (strpos(",", $val) > 0) {
            $person = new Person();
            $parts = split(",", $val); // Assume the value is last, first
            $person->setGivenName($parts[1]);
            $person->setFamilyName($parts[0]);
        }
        return $person;
    }
}

Phương thức parsePersonName() trong Liệt kê 4 có thể được sửa đổi để khởi tạo đối tượng Person bên ngoài điều kiện if, khi đảm bảo rằng bạn luôn luôn nhận một đối tượng Person hợp lệ. Tuy nhiên, bạn sẽ nhận được một Person mà các thuộc tính còn chưa được thiết lập, điều này cũng không đưa bạn đến một vị trí tốt hơn.
Thay vì để mặc cho người gọi lớp của bạn phỏng đoán, hãy chủ động kiểm tra tính hợp lệ của các đối số. Nếu một biến chưa thiết lập không thể tạo ra một kết quả hợp lệ, hãy kiểm tra biến và đưa ra một InvalidArgumentException. Nếu chuỗi ký tự không thể trống rỗng hoặc phải có một định dạng cụ thể, hãy kiểm tra định dạng và đưa ra một ngoại lệ. Liệt kê 5 biểu thị làm thế nào để tạo ra các ngoại lệ của riêng bạn, cũng như một số điều kiện mới trong phương thức parsePerson() để giải thích một số các xác nhận hợp lệ ban đầu.

Liệt kê 5. Thói quen tốt đưa thêm các báo lỗi 
<?php
class InvalidPersonNameFormatException extends LogicException {}


class PersonUtils
{
    public static function parsePersonName($format, $val)
    {
        if (! $format) {
            throw new InvalidPersonNameFormatException("Invalid PersonName format.");
        }

        if ((! isset($val)) || strlen($val) == 0) {
            throw new InvalidArgumentException("Must supply a non-null value to parse.");
        }


    }
}
?>

Dòng dưới đáy là cái mà bạn muốn mọi người có thể sử dụng lớp của bạn mà không phải biết các hoạt động bên trong của nó. Nếu họ sử dụng nó không đúng hoặc theo cách mà bạn đã không dự định, họ không phải phỏng đoán lý do tại sao nó không hoạt động. Với tư cách là một láng giềng tốt, bạn hiểu rằng mọi người sử dụng lại lớp của bạn mà không phải là các thầy bói và do đó bạn nên loại bỏ việc phỏng đoán đó.
Khi tôi lần đầu tiên học về các khái niệm OO, tôi đã nghi ngờ rằng các giao diện là thực sự có ích hay không. Một đồng nghiệp của tôi đã nêu ra phép so sánh việc không sử dụng các giao diện giống như đang nhìn vào cái đầu của Medusa. Trong thần thoại Hy Lạp, Medusa là một quỷ cái có bộ tóc là những con rắn. Bất kỳ người nào mà nhìn thẳng vào nó sẽ biến thành đá. Perseus, người đã giết Medusa, đã có thể đối phó với con quỷ bằng cách nhìn vào hình ảnh phản chiếu của nó trong cái khiên của anh, vì vậy không bị biến thành đá.
Giao diện là tấm gương của bạn để đối phó với Medusa. Khi bạn sử dụng một triển khai thực hiện cụ thể, rõ ràng, mã của bạn phải thay đổi nếu mã triển khai thực hiện của bạn thay đổi. Việc sử dụng trực tiếp các triển khai thực hiện sẽ hạn chế các tùy chọn của bạn, giống như bạn đã biến các lớp của bạn thành đá.
Liệt kê 6 hiển thị một ví dụ để nạp đối tượng Person từ một cơ sở dữ liệu. Nó nhận tên person và trả về đối tượng Person phù hợp lấy từ cơ sở dữ liệu.

Liệt kê 6. Thói quen xấu không sử dụng các giao diện 
<?php
class DBPersonProvider
{
    public function getPerson($givenName, $familyName)
    {
        /* go to the database, get the person... */
        $person = new Person();
        $person->setPrefix("Mr.");
        $person->setGivenName("John");
        return $person;
    }
}

/* I need to get person data... */
$provider = new DBPersonProvider();
$person = $provider->getPerson("John", "Doe");

echo($person->getPrefix());
echo($person->getGivenName());

?>

Mã để nạp Person từ cơ sở dữ liệu là tốt cho đến khi có một số điều gì đó thay đổi trong môi trường. Ví dụ, nạp Person từ cơ sở dữ liệu có thể là tốt cho phiên bản đầu tiên của ứng dụng, nhưng đối với phiên bản thứ hai, bạn có thể cần phải thêm các khả năng để nạp person từ một dịch vụ web. Về bản chất, lớp đã biến thành đá vì nó đang trực tiếp sử dụng lớp triển khai thực hiện và bây giờ rất dễ hỏng nếu thay đổi.
Liệt kê 7 cho thấy một ví dụ về mã mà sẽ không thay đổi khi một cách nạp mới trở thành sẵn có cho người sử dụng và được triển khai thực hiện. Ví dụ cho thấy một giao diện được gọi là PersonProvider, có khai báo chỉ một phương thức. Nếu mã bất kỳ sử dụng PersonProvider, thì mã đó sẽ bị ngăn cản không được sử dụng trực tiếp các lớp triển khai thực hiện. Thay vào đó, nó sử dụng PersonProvider giống như đó là một đối tượng thực sự.

Liệt kê 7. Thói quen tốt về sử dụng các giao diện 
<?php
interface PersonProvider
{
    public function getPerson($givenName, $familyName);
}

class DBPersonProvider implements PersonProvider 
{
    public function getPerson($givenName, $familyName)
    {
        /* pretend to go to the database, get the person... */
        $person = new Person();
        $person->setPrefix("Mr.");
        $person->setGivenName("John");
        return $person;
    }
}

class PersonProviderFactory
{
    public static function createProvider($type)
    {
        if ($type == 'database')
        {
            return new DBPersonProvider();
        } else {
            return new NullProvider();
        }
    }
}

$config = 'database';
/* I need to get person data... */
$provider = PersonProviderFactory::createProvider($config);
$person = $provider->getPerson("John", "Doe");

echo($person->getPrefix());
echo($person->getGivenName());
?>

Khi bạn sử dụng các giao diện, cố gắng tránh tham chiếu trực tiếp đến các lớp triển khai thực hiện. Thay vào đó, hãy sử dụng một cái gì đó bên ngoài đối tượng của bạn để cung cấp cho bạn việc triển khai thực hiện đúng. Nếu lớp của bạn nạp việc triển khai thực hiện dựa trên một số logic, nó vẫn cần yêu cầu các định nghĩa của tất cả các lớp triển khai thực hiện và điều này sẽ không đưa bạn tiến thêm bao nhiêu.
Bạn có thể sử dụng một mẫu nhà máy (Factory) để tạo ra một cá thể của một lớp triển khai thực hiện giao diện của bạn. Một phương thức factory, theo quy ước, bắt đầu bằng việc tạo và trả về một giao diện. Nó có thể nhận bất kỳ đối số nào cần thiết cho phương thức factory của bạn để tìm ra lớp triển khai thực hiện nào là một lớp đúng để trả về.
Trong Liệt kê 7, phương thức createProvider() đơn giản chỉ dùng một biến $type. Nếu $type được thiết lập là cơ sở dữ liệu, phương thức database, sẽ trả về một cá thể của DBPersonProvider. Bất kỳ việc triển khai thực hiện mới để nạp nhiều Person từ một kho lưu trữ không cần bất kỳ sự thay đổi nào trong lớp có sử dụng phương thức Factory và giao diện.DBPersonProvider thực hiện giao diện PersonProvider và có triển khai thực hiện thực tế phương thức getPerson() bên trong nó.
Lắp ghép lỏng các môđun của bạn là một việc tốt; nó là một trong các tính chất để cho phép bạn đóng gói sự thay đổi. Hai trong số các thói quen khác — "Hãy khiêm tốn" và "Tránh nhìn vào Medusa" — giúp bạn làm việc theo hướng xây dựng các mô đun được lắp ghép lỏng. Để lắp ghép lỏng các lớp của bạn, hãy phát triển đặc tính cuối cùng bằng cách xây dựng thói quen về việc làm giảm sự phụ thuộc giữa các lớp của bạn.
Trong Liệt kê 8, việc làm giảm sự phụ thuộc không nhất thiết là làm giảm các sự phụ thuộc đối với trình khách sử dụng một đối tượng. Thay vào đó, ví dụ minh hoạ việc làm giảm các sự phụ thuộc vào một lớp chính xác và tối thiểu sự phụ thuộc này đối với các lớp khác.

Liệt kê 8. Thói quen xấu về lắp ghép chặt từ đối tượng Address
<?php

require_once "./AddressFormatters.php";

class Address
{
    private $addressLine1;
    private $addressLine2;
    private $city;
    private $state; // or province...
    private $postalCode;
    private $country;

    public function setAddressLine1($line1)
    {
        $this->addressLine1 = $line1;
    }

  /* accessors, etc... */

    public function getCountry()
    {
        return $this->country;
    }

    public function format($type)
    {
        if ($type == "inline") {
            $formatter = new InlineAddressFormatter();
        } else if ($type == "multiline") {
            $formatter = new MultilineAddressFormatter();
        } else {
            $formatter = new NullAddressFormatter();
        }
        return $formatter->format($this->getAddressLine1(), 
            $this->getAddressLine2(), 
            $this->getCity(), $this->getState(), $this->getPostalCode(), 
            $this->getCountry());
    }
}

$addr = new Address();
$addr->setAddressLine1("123 Any St.");
$addr->setAddressLine2("Ste 200");
$addr->setCity("Anytown");
$addr->setState("AY");
$addr->setPostalCode("55555-0000");
$addr->setCountry("US");

echo($addr->format("multiline"));
echo("\n");

echo($addr->format("inline"));
echo("\n");

?>

Đoạn mã gọi phương thức format() của một đối tượng Address có thể trông rất ấn tượng — tất cả mọi việc mà nó làm là sử dụng lớp Address, gọi phương thức format(), và thế là xong. Ngược lại, lớp Address không may mắn như vậy. Nó cần phải biết nhiều trình định dạng (formatters) khác nhau được sử dụng để định dạng đúng. Điều này có thể làm cho đối tượng Addresskhông có khả năng sử dụng lại với những người khác, đặc biệt là nếu một người nào khác không quan tâm đến việc sử dụng các lớp của trình định dạng trong phương thức format(). Mặc dù mã đang sử dụng Address hiện không có nhiều sự phụ thuộc, nhưng lớp Address lại có một số phụ thuộc, trong khi nó lẽ ra chỉ là một đối tượng dữ liệu đơn giản.
Lớp Address được lắp ghép chặt với các lớp triển khai thực hiện để biết cách làm thế nào để định dạng một đối tượng Address.
Khi xây dựng các thiết kế OO tốt, cần suy nghĩ về một khái niệm gọi là Phân tách các mối quan tâm (Separation of Concerns-SoC). SoC có nghĩa là bạn cố gắng để phân tách các đối tượng theo cái mà chúng thực sự dính líu đến, do đó, làm lỏng việc lắp ghép. Trong lớp Address ban đầu, nó đã phải quan tâm đến việc làm thế nào để định dạng chính nó. Điều đó có lẽ không phải là một thiết kế tốt. Thay vào đó, một lớp Address cần lo lắng về các phần của Address, trong khi một số kiểu trình định dạng lo lắng về việc làm thế nào để định dạng đúng các địa chỉ.
Trong Liệt kê 9, mã định dạng địa chỉ được di chuyển đến các giao diện, các lớp triển khai thực hiện và một nhà máy (factory) — hãy nhớ xây dựng thói quen "sử dụng các giao diện". Bây giờ, lớp AddressFormatUtils có trách nhiệm tạo ra một trình định dạng và định dạng một Address. Bất kỳ đối tượng khác nào bây giờ có thể sử dụng một Address mà không cần phải lo lắng về việc phải có được định nghĩa về các trình định dạng.

Liệt kê 9. Thói quen tốt về lắp ghép lỏng giữa các đối tượng 
<?php

interface AddressFormatter
{
    public function format($addressLine1, $addressLine2, $city, $state, 
        $postalCode, $country);
}

class MultiLineAddressFormatter implements AddressFormatter 
{
    public function format($addressLine1, $addressLine2, $city, $state, 
        $postalCode, $country)
    {
        return sprintf("%s\n%s\n%s, %s %s\n%s", 
            $addressLine1, $addressLine2, $city, $state, $postalCode, $country);
    }
}

class InlineAddressFormatter implements AddressFormatter 
{
    public function format($addressLine1, $addressLine2, $city, $state, 
        $postalCode, $country)
    {
        return sprintf("%s %s, %s, %s %s %s", 
            $addressLine1, $addressLine2, $city, $state, $postalCode, $country);
    }
}

class AddressFormatUtils 
{
    public static function formatAddress($type, $address)
    {
        $formatter = AddressFormatUtils::createAddressFormatter($type);
        
        return $formatter->format($address->getAddressLine1(), 
            $address->getAddressLine2(), 
            $address->getCity(), $address->getState(), 
            $address->getPostalCode(), 
            $address->getCountry());
    }
    
    private static function createAddressFormatter($type)
    {
        if ($type == "inline") {
            $formatter = new InlineAddressFormatter();
        } else if ($type == "multiline") {
            $formatter = new MultilineAddressFormatter();
        } else {
            $formatter = new NullAddressFormatter();
        }
        return $formatter;
    }
}

$addr = new Address();
$addr->setAddressLine1("123 Any St.");
$addr->setAddressLine2("Ste 200");
$addr->setCity("Anytown");
$addr->setState("AY");
$addr->setPostalCode("55555-0000");
$addr->setCountry("US");

echo(AddressFormatUtils::formatAddress("multiline", $addr));
echo("\n");

echo(AddressFormatUtils::formatAddress("inline", $addr));
echo("\n");
?>

Mặt hạn chế, tất nhiên, là bất cứ khi nào sử dụng các mẫu hình sẵn, thường cũng có nghĩa là số lượng các tạo phẩm (các lớp, các tệp tin) tăng lên. Tuy nhiên, điều này được bù đắp bằng việc giảm công sức bảo trì trong mỗi lớp và có thể được giảm nhiều hơn nữa nếu có được khả năng sử dụng lại đúng cách.
Các thiết kế OO kết dính cao là rất tập trung và được tổ chức thành các mô đun liên quan. Tìm hiểu kỹ "các mối quan tâm" là rất quan trọng trong việc xác định tổ chức các hàm và các lớp như thế nào để kết dính chặt chẽ.
Khi một thiết kế có kết dính thấp, nó có các lớp và các phương thức không được nhóm lại thích hợp. Thuật ngữ mã spaghettithường được sử dụng để mô tả các lớp và các phương thức được gói chung với nhau và có kết dính thấp. Liệt kê 10 cung cấp một ví dụ về mã Spaghetti. Lớp tổng quát Utils sử dụng nhiều đối tượng khác nhau và có rất nhiều sự phụ thuộc. Nó làm mỗi thứ một tí, làm cho khó có thể sử dụng lại.

Liệt kê 10. Thói quen xấu về kết dính thấp
<?php

class Utils
{
    public static function formatAddress($formatType, $address1, 
        $address2, $city, $state)
    {
        return "some address string";
    }
    
    public static function formatPersonName($formatType, $givenName, 
        $familyName)
    {
        return "some person name";
    }
    
    public static function parseAddress($formatType, $val)
    {
        // real implementation would set values, etc...
        return new Address();
    }
    
    public static function parseTelephoneNumber($formatType, $val)
    {
        // real implementation would set values, etc...
        return new TelephoneNumber();
    }
}

?>

Kết dính cao có nghĩa là các lớp và các phương thức có liên quan với nhau được nhóm lại. Khi các phương thức và các lớp có kết dính cao, bạn có thể dễ dàng tách ra toàn bộ nhóm mà không ảnh hưởng đến thiết kế. Các thiết kế có kết dính cao tạo ra cơ hội cho lắp ghép lỏng. Liệt kê 11 hiển thị hai trong số các phương thức được tổ chức tốt hơn thành lớp. Lớp AddressUtils có chứa các phương thức để làm việc với các lớp Address và cho thấy sự kết dính cao giữa các phương thức có liên quan đến địa chỉ. Tương tự, PersonUtils chứa các phương thức để làm việc riêng với các đối tượng Person. Hai lớp mới này với các phương thức kết dính cao của chúng sẽ lắp ghép lỏng vì chúng có thể được sử dụng hoàn toàn độc lập với nhau.

Liệt kê 11. Thói quen tốt về kết dính cao 
<?php

class AddressUtils
{
    public static function formatAddress($formatType, $address1, 
        $address2, $city, $state)
    {
        return "some address string";
    }
    
    public static function parseAddress($formatType, $val)
    {
        // real implementation would set values, etc...
        return new Address();
    }
    
}

class PersonUtils
{
    public static function formatPersonName($formatType, $givenName, 
        $familyName)
    {
        return "some person name";
    }
    
    public static function parsePersonName($formatType, $val)
    {
        // real implementation would set values, etc...
        return new PersonName();
    }
}

?>

Tôi thường nói với mọi người trong các nhóm phần mềm, mà tôi làm lãnh kỹ thuật đạo hay kiến trúc sư rằng kẻ thù lớn nhất của các ngôn ngữ OO là hành động sao chép và dán. Khi chưa có thiết kế OO chuẩn bị trước, không có gì đẻ ra nhiều lộn xộn hơn là việc sao chép mã từ một tệp tin này vào tệp khác. Bất cứ khi nào mà bạn định sao chép mã từ một lớp này tới một lớp tiếp theo, hãy dừng lại và xem xét làm sao có thể sử dụng các hệ thống thứ bậc của lớp để sử dụng các chức năng tương tự hay giống nhau. Bạn sẽ thấy rằng trong nhiều trường hợp, với thiết kế tốt, việc sao chép mã là hoàn toàn không cần thiết.
Liệt kê 12 cho thấy một ví dụ đơn giản của các lớp bộ phận. Chúng bắt đầu với các trường và các phương thức giống hệt — về lâu dài sẽ không tốt khi ứng dụng có thể phải thay đổi. Nếu có một khiếm khuyết trong lớp Person có nhiều khả năng cũng sẽ là một khiếm khuyết trong lớp Employee vì nó xuất hiện qua triển khai thực hiện bằng cách sao chép giữa hai lớp.

Liệt kê 12. Thói quen xấu không sử dụng các hệ thống thứ bậc 
<?php
class Person
{
    private $givenName;
    private $familyName;
}

class Employee
{
    private $givenName;
    private $familyName;
}

?>

Quyền thừa kế là một thói quen khó bắt đầu áp dụng vì thông thường, việc phân tích để xây dựng các mô hình quyền thừa kế đúng đắn có thể mất nhiều thời gian. Ngược lại, sử dụng Ctrl+C và Ctrl+V để xây dựng một triển khai thực hiện mới chỉ mất vài giây. Tuy nhiên, khoảng thời gian này thường rất nhanh được bù đắp lại trong bảo trì, nơi ứng dụng sẽ thực tế trải qua hầu hết phần đời của nó.
Trong Liệt kê 13, lớp Employee mới mở rộng lớp Person Bây giờ nó kế thừa tất cả các phương thức chung và không triển khai thực hiện lại chúng. Ngoài ra, Liệt kê 13 cho thấy việc sử dụng một phương thức trừu tượng để giải thích rằng chức năng cơ bản có thể được đưa vào một lớp cơ sở và chức năng cụ thể hơn có thể để lui lại cho đến khi triển khai thực hiện một lớp.

Liệt kê 13. Thói quen tốt về sử dụng quyền thừa kế 
<?php
abstract class Person
{
    private $givenName;
    private $familyName;
    
    public function setGivenName($gn)
    {
        $this->givenName = $gn;
    }
    
    public function getGivenName()
    {
        return $this->givenName;
    }
    
    public function setFamilyName($fn)
    {
        $this->familyName = $fn;
    }
    
    public function getFamilyName()
    {
        return $this->familyName;
    }
     
    public function sayHello()
    {
        echo("Hello, I am ");
        $this->introduceSelf();
    }
    
    abstract public function introduceSelf();
    
}

class Employee extends Person
{
    private $role;
    
    public function setRole($r)
    {
        $this->role = $r; 
    }
    
    public function getRole()
    {
        return $this->role;
    }
    
    public function introduceSelf()
    {
        echo($this->getRole() . " " . $this->getGivenName() . " " . 
            $this->getFamilyName());
    }
}
?>

Các mẫu thiết kế là các tương tác phổ biến giữa các đối tượng và các phương thức mà đã được thời gian kiểm chứng là giải quyết tốt những bài toán cụ thể. Khi bạn nghĩ về các mẫu hình thiết kế, tức là bạn đang bắt buộc mình lĩnh hội việc các lớp tương tác với nhau như thế nào. Đó là một cách dễ dàng để xây dựng các lớp và các tương tác của chúng mà không mắc phải các lỗi giống như những người khác đã mắc phải trong quá khứ và hưởng lợi từ các thiết kế đã được kiểm chứng
Thực sự là không có ví dụ mã thích hợp nào để giải thích được nghĩ đến các mẫu hình là như thế nào (mặc dù có nhiều ví dụ tốt cho thấy các triển khai thực hiện theo mẫu hình). Tuy nhiên, nói chung, bạn sẽ biết bạn đang xem xét riêng lẻ từng đối tượng mỗi lần khi các dấu hiệu sau đây là đúng:
  • Bạn không vẽ sơ đồ một mô hình đối tượng trước đó.
  • Bạn bắt đầu viết mã triển khai các phương thức đơn lẻ mà chưa vạch ra những nét gốc rễ của mô hình.
  • Bạn không sử dụng đến các tên mẫu hình thiết kế khi nói mà đúng hơn là nói về triển khai thực hiện.
Nói chung, bạn đã nghĩ đến các mẫu khi:
  • Mô hình hóa các lớp và các tương tác của chúng sẵn từ trước.
  • Tạo bản mẫu các lớp (stereotype) theo các mẫu hình của chúng.
  • Sử dụng các tên mẫu, như Factory, Singleton và Facade.
  • Vạch ra phần lớn gốc rễ của mô hình, sau đó bắt đầu thêm triển khai thực hiện.
Xây dựng các thói quen tốt OO trong PHP giúp bạn xây dựng các ứng dụng ổn định hơn, dễ bảo trì hơn và có khả năng mở rộng dễ dàng hơn. Ghi nhớ:
  • Hãy khiêm tốn.
  • Hãy là một láng giềng tốt.
  • Tránh nhìn vào Medusa.
  • Giữ vững nguyên tắc liên kết yếu nhất.
  • Bạn là cao su, tôi là keo dán.
  • Duy trì một gia đình.
  • Nghĩ đến các mẫu.
Khi bạn đã xây dựng và có được các thói quen này, bạn có thể bất ngờ về các thay đổi về chất lượng của các ứng dụng của bạn.

Học tập
Lấy sản phẩm và công nghệ
  • Đổi mới dự án phát triển mã nguồn mở tiếp theo của bạn với phần mềm dùng thử của IBM, có sẵn để tải về hoặc trên đĩa DVD.
  • Tải về các phiên bản đánh giá sản phẩm IBM, và nhận các sản phẩm phần mềm trung gian và các công cụ phát triển ứng dụng thực hành từ DB2®, Lotus®, Rational®, Tivoli® và WebSphere®.
Thảo luận

Thứ Ba, 27 tháng 12, 2011

Tổng quan Drupal

Drupal là một khung sườn phát triển phần mềm hướng module, một hệ thống quản trị nội dung miễn phí và mã nguồn mở hàng đầu hiện nay. Bài viết này được Aptech webmaster dịch từ SmashingMagazine của tác giả Steven Snell, sẽ giới thiệu với bạn về các tài nguyên cần thiết liên quan tới Drupal: các yếu tố cơ bản, làm việc với module, thiết kế theme, giao diện, các nguồn hướng dẫn vv...

1. Các yếu tố cơ bản

Nếu bạn mới chỉ vừa tiếp cận với Drupal, hãy tham khảo kĩ các website được giới thiệu dưới đây. Các website này cung cấp đầy đủ các thông tin cơ bản về Drupal cũng như các tài liệu cần thiết cho công việc chuyên sâu về Drupal.
Drupal.org
Trang chủ của Drupal, nơi cung cấp các Drupal phát triển mới nhất.

Drupal Handbooks
Nếu bạn mới chỉ vừa cài đặt Drupal, bạn sẽ tìm thấy ở đây rất nhiều trợ giúp bổ ích.
Theme Developer’s Cheat Sheet (dành cho Drupal 5)
Một tài liệu dạng PDF mà có thể bạn sẽ tra cứu hàng ngày khi làm việc với Drupal.

Drupal API Reference
Tài liệu chính thức về Drupal API, nơi chưa đựng giải đáp cho mọi thắc mắc của bạn liên quan đến Drupal API.

Drupal Taxonomy, Drupal Nodes and Other Terms - What Do They Mean?
Một số khái niệm sử dụng trong Drupal có thể còn mới với bạn. Hãy tham khảo mô tả về các khái niệm đó ở website này.
Drupal Code Search
Một địa chỉ tuyệt vời dành cho những người phát triển Drupal. Bạn có thể tìm thấy ở đây rất nhiều mã nguồn cũng như hàng nghìn module và themes của Drupal.

Drupal Whitepapers, Cheat Sheets and Free Books
Website này là một bộ sưu tập các thủ thuật hữu dụng với Drupal, tuy nhiên cần phân biệt kĩ vì một số các thủ thuật được viết cho các phiên bản Drupal cũ.

WordPress vs. Drupal
Địa chỉ này sẽ phân tích cho bạn khi nào nên dùng WordPress, khi nào cần dùng Drupal, ưu nhược điểm của từng hệ thống, giúp bạn có sự lựa chọn tốt hơn.

WEB 2.0 là gì ?

Web 2.0 - Khái niệm và bản chất của chúng như thế nào ?

Web 2.0 đã và đang trở thành xu hướng cho người lập trình và các nhà tuyển dụng. Nhưng ít ai tự định nghĩa được cho mình web 2.0 có nghĩa là gì ?. Chỉ loáng thoáng nghe đâu đó nói về công nghệ 2.0 rồi thì gán cái danh cái gì mới nhất chắc là sẽ tốt nhất. Từ đó, cái ý nghĩa của web 2.0 nó trở nên lang mang và xa rời thực tế. Có người thì hiểu web 2.0 có nghĩa là một công nghệ gì đó mới mẻ, có người định nghĩa web 2.0 đơn giản chỉ dùng để làm cho website chuyên nghiệp hơn,....
Có rất nhiều ý kiến tranh cái về khái niệm, sự xuất sứ của web 2.0. Hôm nay vô tình tôi đọc được một bài nhỏ nói về web 2.0, xin được viết lại cho những bạn nào có hứng thú muốn tìm hiểu bản chất của web 2.0 có nghĩa là gì.
Sai lầm lớn nhất của giới báo chí và những người cổ vũ cho web 2.0 là dùng hiện tượng giải thích cho nguyên nhân. Tất cả những cái như mạng xã hội, blog… chỉ là kết quả của một quá trình thay đổi về tư duy đã diễn ra trong những năm gần đây. Web 2.0 là có thực nhưng nó không phải là cái mà bạn có thể định nghĩa thông qua một vài ví dụ hay vài mỹ từ. Web 2.0 cũng không hẳn là cái mà bạn chỉ biết được khi bạn thấy nó. Thật không may, những ngôn từ hoa mỹ, những khẩu hiệu giật gân thường phủ bóng lên những điều quan trọng nhất. Sàng lọc lại, đây là những cái mà chúng ta nên hiểu về bản chất của Web 2.0:
+ Web 2.0 là tự do về dữ liệu: Có rất nhiều bạn nói rằng họ không hiểu rõ về web API, RSS, mashup, tag… Nói chung đó là những công cụ giúp bạn lấy dữ liệu từ những nguồn khác nhau trên web mà không cần phải vào trang web đó. Dùng API của Flickr bạn có thể xem các hình ảnh trên trang web này mà không cần phải vào Flickr. Dữ liệu ở trên web luôn có rất nhiều và trước kia người ta không thể lấy về dùng một cách tự động và tiện lợi. Web 2.0 đã thỏa mãn giấc mơ đó.
+ Web 2.0 là băng thông rộng: Web 2.0 tận dụng việc phổ biến của đường truyền băng thông rộng như ADSL, cáp quang… Bạn thử tưởng tượng việc xem một đoạn video trên YouTube với kết nối dial-up sẽ thế nào? Nếu không có băng thông rộng thì hầu hết các ứng dụng Web 2.0 sẽ chỉ có ý nghĩa trong một trường thí nghiệm.
+ Web 2.0 là sự liên kết: Web 2.0 là sự liên kết giữa người với người (MySpace), giữa các từ khóa, khái niệm với nhau (Wikipedia), giữa các website (Mashup)… Bản chất, Web 2.0 thay đổi cách liên kết từ quan hệ một-nhiều (one-to-many, tức là từ một website tới những người truy cập) sang quan hệ nhiều-nhiều (many-to-many) bằng các mối liên kết mới.
+ Web 2.0 đặt con người lên trên công nghệ: Tuần báo Time đã bầu "person of the year" năm 2006 là YOU. Tại sao? Bạn, con người, chính là trung tâm của web 2.0, và theo báo Time, cuộc cách mạng Web 2.0 là tâm điểm của năm 2006! Đây cũng chính là đặc điểm dễ thấy nhất của Web 2.0, nó hiểu người dùng cần gì trên Web và thỏa mãn họ.
+ Web 2.0 cho phép người dùng "sử dụng" dữ liệu chứ không chỉ "lấy" dữ liệu: Công đầu của công nghệ AJAX không phải là làm cho các ứng dụng web dùng giống như các ứng dụng desktop mà giúp người dùng dễ dàng thay đổi, thêm, bớt dữ liệu tùy ý trên web thay vì chỉ có thể "đọc" chúng như những bản tin.
+ Web 2.0 làm cho người ta không còn nghĩ Web chỉ là một dạng báo điện tử hay một kiểu TV khác: Hmm, đã có lúc người ta coi Web là một dạng truyền thông như báo chí hay TV vì tính một chiều của nó. Nhưng web 2.0 cho thấy giờ đây có những cái bạn chỉ có thể làm thông qua Web chứ không thể qua báo chí hay TV. Tính tương tác mà Web 2.0 đem lại làm cho Web vượt qua khái niệm một trang báo điện tử: nó sẽ trở thành một phương tiện giao tiếp hơn là một công cụ tuyên truyền.
Cuối cùng, nếu bạn đã hiểu bản chất web 2.0 là gì thì điều quan trọng nhất khi làm một trang web 2.0 là hãy tưởng tượng ra cái gì bạn không thể làm được nếu không có WEB.

Thứ Bảy, 24 tháng 12, 2011

Tin nhắn độc đáo

1 "Đố em noh ssiW nghĩa là gì? Chỉ cần xoay ngược lại điện thoại, em sẽ biết ngay. a nhớ e!"

2 "Thong bao: thoi tiet Nha Trang dem nay rat lanh! so may 090xxxxxxx gui tang 1 chut am ap cho nguoi dang doc tin nhan nay!"

3 "Nha Trang hôm nay mưa , bỗng nhiên nhớ đến 1 ng , ko biết ng đó có nhớ đến mình ko nhỉ"

4 "Bé biết anh ngồi đâu để nhắn tin cho bé ko? gần ngọn cây đấy, dưới đất ko có sóng. Vì anh nhớ bé rất rất nhiều".

5 "Lo học đi, h còn lôi điện thoại ra đọc tin nhắn à" (tin nhắn dành cho các pé đang thi)

6 "Dậy đi bé ơi, oánh răng, rửa mặt rồi còn đi thi, anh đã dọn đường rồi, ko sợ tắc đường nữa dâu"

7 Rủ pé đi ăn tối : "Xin nữ thí chủ cho bần tăng tý cơm tối"

8 "Theo thông tin từ trung tâm khí tượng thủy văn, sáng mai trời Nha Trang vẫn tiếp tục mưa và lạnh, nhắn số điện thoại này sáng đi làm nhớ mặc ấm và mang áo mưa. Còn bây giờ: Chúc em ngủ ngon"

9 "Ngủ ngoan nhé, ko được đạp chăn ra đâu, lạnh lắm đấy! Anh ngủ đây"

10 "nếu có bản án dành cho anh vì đã yêu em thì anh xin đứng trước toà và nhận bản án chung thân được bên em suốt đời..."

11 "Nếu vẫn còn buồn trong lòng, hãy gọi đến số 09....... Đó là số tổng đài 1080 của riêng em đấy."

12 "You can fall from the sky, you can fall from a tree, but the best way to fall is in love with me"

13 "Mặt Trăng là vệ tinh của Trái Đất, còn em là vệ tinh của cuộc đời anh"

14 "Kể từ khi mặt phẳng trái tim anh bị đường vuông góc từ ánh mắt em hạ vào, anh không thể xác định nổi bán kính để vẽ vòng tròn tình cảm của mình nữa"

15 "Trên Trái Đất có 6.000.000.000 người. Và anh không hiểu vì sao anh chỉ nhắn tin cho mỗi mình em. Có lẽ vì 5.999.999.999 người còn lại không thể thay thế được em"

16 "Châu Âu ngủ, Châu Á cũng đang ngủ, Châu Mỹ đang tối dần, chỉ có đôi mắt đẹp nhất trên thế giới này đang đọc tin nhắn của anh"

17 "Lúc em chào đời, trời đã mưa. Đó là trời khóc vì tiếc rằng đã để mất một thiên thần tuyệt vời như em"

18 "Mọi người dạy cho anh biết rằng một giờ có 60 phút, một phút có 60 giây, nhưng không ai dạy anh rằng một giây thiếu em là một giây bất tận, một phút vắng em là một phút vĩnh hằng" 19 "Làm sao em có thể bắt trời không mưa khi trên trời dày đặc mây đen? Làm sao em có thể bắt lá vàng không rụng khi mùa thu đã tới? Làm sao em có thể bắt anh không yêu em khi em có trên đời này?"

20 "Anh chỉ ước một thảo nguyên đầy chó. Một nông trường bát ngát lá mơ xanh. Một dãy Trường Sơn trồng đầy sả ớt. Một dòng sông chứa đầy rượu Jonny. Ðể nơi ấy tháng ngày anh tu luyện. Xa bụi trần và quên lãng bóng hình em ........"

21 "Buồn cười cực em à, anh vừa mơ thấy em rủ anh đi chơi vườn hoa rồi sau đó ... hun anh! Anh hỏi là em thích anh à, thì em gật đầu! Sau đó chúng mình đi chơi tiếp vui lắm! Này, mơ thôi đấy, không có vấn đề gì đâu! He he!"

22 Nếu bất chợt emnhận ra rằng mình đang trong 1 căn fòng tối, nhìn thấy máu và sự ẩm ướt ở khắp mọi nơi. Đừng lo em ạ, emđang ở một nơi rất an toàn - trái tim anh

23 Trên thiên đường có 10 thiên thần: 5 thiên thần đang chơi đùa, 4 thiên thần đang nói chuyện và 1 thiên thần đang đọc tin nhắn này...

24 Thầy Toán dạy anh 1 giờ = 60 phút, 1 phút = 60 giây, nhưng thầy chẳng nói với anh 1 giây không có em lại bằng tới 100 năm. Nhớ em!

25 "Nếu anh ở dưới địa ngục và em ở trên thiên đường. Anh sẽ ngước nhìn và hân hoan cùng em. Nhưng nếu anh ở trên thiên đường và em ở dưới địa ngục, anh sẽ cầu Trời gửi anh xuống bởi anh biết rằng thiên đường sẽ ko phải là thiên đường nếu thiếu em!

26 Anh đã đánh rơi một giọt nước mắt vào biển khơi, và khi một ai đó tìm thấy nó thì đó là lúc anh ngừng yêu em

27 Anh có chữ “I”, anh có chữ “L”, anh có chữ “O”, anh có chữ “V”, anh có chữ “E”, và hãy cho anh biết làm thế nào để anh có “U”

28 Mỗi ngày, khi Chúa mở cánh cửa thiên đường, Ngài nhìn anh và hỏi: ”Điều ước hôm nay của con là gì?!”. Anh trả lời: Xin Người hãy bảo vệ người đang đọc tin nhắn này!

29 Một ngày nào đó khi anh chết đi hoặc đi đâu đó thật xa, anh sẽ viết tên em lên tất cả những vì sao, để người người có thể ngước lên nhìn và hiểu rằng em có nghĩa với anh nhường nào.

30 Nếu giọt nước là những nụ hôn, anh sẽ trao em biển cả Nếu lá là những ôm ấp vuốt ve, anh sẽ tặng em cả rừng cây Nếu đêm dài là tình yêu, anh muốn gửi em cả trời sao lấp lánh Nhưng trái tim anh không thể dành tặng em được vì nơi đó đã thuộc về em

31 Anh viết tên em trên cát nhưng sóng biển cuốn trôi đi, anh viết tên em trên bầu trời nhưng gió thổi bay mất, nên anh viết tên em trong trái tim anh nơi mà nó sẽ ở mãi …

32 Anh mời em một chuyến du lịch đặc biệt: Hướng đi - các vì sao. Người lái - tình yêu. Phương tiện giao thông - trái tim. Hành khách - em và anh. Vé không được trả lại bởi anh đã mua bằng 3.000 cái hôn

33 Anh đã chuyển 2.000 giấc mơ và 1.000 ý nghĩ ngọt ngào vào tài khoản trong trái tim em. Những khi không có thời gian dành cho anh, em hãy lấy chúng từ tài khoản.

34 Tin gửi lúc nửa đêm: "Tự nhiên anh nghĩ em đang lạnh và buồn vì phải ngủ một mình, đang sắp mơ những giấc mơ hãi hùng... Vì thế anh quyết định nhắn tin để đánh thức em...".

35 giáng sinh năm nào chúa cũng xuống trần gian, pé bit để làm rì hem?để tìm thiên thần xinh đẹp nhất của ổng bị lạc xuống đây, nhg mòa a hem cho ổng bít thiên thần của ổng đang đọc tn này đâu, lỡ ổng mang pé về thì seo!?!?

36 "Có đôi khi lý trí anh bảo con tim anh, thoy hok iu hok zận hờn hok nhớ..., nhưng trái tim anh vốn là tên quái gỡ, cứ cồn cào tha thiết gọi tên em.!"

37 "Em ạ! Anh nhờ bưu điện gửi đến em một món quà. Đó là nỗi nhớ anh dành cho em lúc này. Nhưng thật tiếc họ đã từ chối. Họ bảo nó quá lớn không thể gửi được. Um, anh phải làm sao đây?"

38 Loading... 16% 37% 79% 100% DONE U are successfully loaded in my heart

39 "Thuê bao quý khách đang dùng hiện đang bị 1 thuê bao khác để ý. Đề nghị quý khách chú ý."

40 Em đã ngủ chưa , nếu mơ thấy ác mộng thì anh là con quỷ trong ác mộng đó , còn nếu ko ngủ được , hãy gọi cho anh nhé , đừng ngại gì cả, anh tắt máy rồi.

41 Có 1 lần Chúa hiện lên và hỏi anh "Nếu phải chọ giữa 1 người yêu hoàn hảo và $1000000000, con sẽ chọn gì?""anh trả lời anh chọn $1000000000, vì anh đã có em là người yêu hoàn hảo , cần thêm làm gì ?

42 " nếu e thích đi chơi, a sẽ đi cùng e...nếu e vui, a sẽ cười cùng em...nếu e khóc, a sẽ khóc cùng em...còn e ko ngủ đc thì a chịu thôi...vì a ko thể ngủ cùng em ... ^ ^"

43 Em có rảnh rỗi không? Có, sao hả anh? Vậy để anh nhắn tin cho em xoá ... 

44 " ............................" Chỉ cần thế là cả 2 đều hiểu rồi đúng ko?




Một vài tin nhắn nói về nỗi nhớ: 

- Anh nghe ai đó gọi tên em nhưng khi quay lại nhìn, anh chỉ một mình. Anh nhận ra đó là trái tim anh đang nói: Anh nhớ em. 

- Hôm nay anh đã làm 3 việc: Nhớ em, nhớ em và nhớ em 

- Trống vắng không có nghĩa là cô đơn, mà chính là nỗi nhớ em 

- Nếu giấc mơ là cách duy nhất để ở bên em, anh sẽ chẳng bao giờ mở mắt ra nữa 

- Khi em không ở đây, có gì đó đã mất. đó là nụ cười anh. 
Một vài tin nhắn thay cho lời chúc buổi sáng: 

- Tối qua anh đi ngủ với một nụ cười vì anh biết anh sẽ mơ thấy em… Và sáng nay anh thức dậy cũng với một nụ cười vì anh biết em không là một giấc mơ. 

- Tình yêu với em đã khiến mỗi sáng anh thức dậy có ý nghĩa và đẹp hơn. 

- Em là điều đầu tiên ập vào tâm trí anh buổi sáng và là điều cuối cùng bước ra khỏi trái tim anh buổi tối. 

- Buổi sáng khi anh nói “Chúc em một ngày lành” đây không chỉ là một lời chúc mà còn là một thông điệp tình yêu thầm lặng. Anh nghĩ đến em khi vừa thức dậy. 

- Khi anh thức dậy anh nghĩ đến em. Khi anh đi ngủ, anh nghĩ đến em. Khoảng thời gian còn lại, anh nghĩ đến chúng ta. 
Một vài câu tỏ tình: 

- 831 nghĩa là “anh yêu em”. 8 chữ. 3 từ. 1 nghĩa.” 

- Anh nhắm mắt lại để trông thấy gương mặt em. Anh khép môi lại để nghe em nói. Anh che tai đi để giữ lấy tiếng em. Nhưng anh không thể khép lòng lại, vì anh yêu em. 

- Vì kỷ niệm hôm qua, tình yêu hôm nay, và mơ ước ngày mai, anh yêu em 

- Anh không biết nhiều điều đâu nhưng có một điều anh biết chắc chắn. đó là anh yêu em. 

- Anh yêu em nhiều hơn là anh tưởng. Nếu tính toán bằng con số, có lẽ một chiếc computer cũng không đủ. 
Một vài tin nhắn mang tính thể hiện: 

- Nếu thượng đế là 1 DJ, cuộc đời là 1 sàn nhảy, tình yêu là nhịp điệu thì em yêu ơi, em chính là âm nhạc 

- Thi thoảng anh tự hỏi liệu có đáng để đấu tranh cho tình yêu không nhưng rồi nhớ tới khuôn mặt em và anh lại sẵn sàng cho trận chiến mới 

- Nếu khu nhà em bị mất điện, chúng ta vẫn có thể xem ti vi bằng đèn cầy đấy em à 

- Anh sẽ lấy thuốc cho em khi em bị đau bụng, thay tấm nệm mới khi cái cũ bị rách… Ôi thật là tuyệt vời khi cùng già với em 

- Em bị triệu đến toà án vì đã bước vào ước mơ của anh, đánh cắp trái tim anh, và cướp đi mọi cảm xúc trong anh. Em bị kết án ở bên anh mãi mãi. Em có gì biện hộ không? 

- Anh chọn yêu em trong câm lặng vì trong câm lặng anh không bị cự tuyệt. anh chọn yêu em trong sự cô đơn của em vì trong sự cô đơn đó chẳng ai có thể có em cả ngoại trừ anh 

- Người ta bảo yêu là có tội, anh chẳng bao giờ hỏi vì sao. nhưng nếu có tội khi yêu em, anh sẽ phạm tội cho tới chết. 

- Anh chẳng sợ gì cả trên đời này, thậm chí còn ngạo nghễ cười trước cái chết. thế nhưng khi nhìn vào mắt em, anh đã sợ. anh sợ anh yêu em biết bao nhiêu. 
Vài tin nhắn gọi là vui vui: 

- Tại sao người ta lại gọi là nụ hôn kiểu Pháp nhỉ, khi chúng ta làm điều ấy thật tuyệt? 

- Này em, coi chừng đấy, tình yêu thì mù quáng nhưng ông hàng xóm thì đâu có mù! 

- Chắc chắn trên biển cả thật nhiều cá nhưng em là loại duy nhất ăn phải con sâu của anh 

- Cưng à, nếu tình yêu có cảm giác như thế này, cho anh viên thuốc giảm đau nhé! 

- Này thằng bé nói thật nhé, cả đời thằng bé chỉ can đảm được một lần thôi. Đó là yêu con bé đấy! 
Thêm một vài tin nhắn tỏ tình: 

- Em là điều đã xảy ra khi anh đang ước có một ngôi sao 

- Nếu em hỏi về tình yêu, anh không thể trả lời được. Nhưng nếu em hỏi anh yêu ai, thì người đó là em đấy! 

- Đừng nhăn mặt như thế em à, vì em không biết có người tim đập sai nhịp vì nụ cười em. 

- Khi cô đơn và sợ hãi, anh đã xin Thượng đế gửi cho anh một thiên thần. Người quá chừng tốt bụng khi gửi em cho anh. 

- Số phận cho anh gặp em. Chọn lựa khiến anh trở thành bạn của em. Còn yêu em? Điều này vượt qua tầm kiểm soát của anh rồi 
Tiếp theo: 

- Tử tế trong lời nói tạo nên tự tin. Nhân hậu trong suy nghĩ tạo thành sâu sắc. Ân cần trong trao tặng tạo thành lòng yêu thương. (Lão Tử) 

- Không có món quà nào quá nhỏ để trao tặng, cũng như quá đơn giản để nhận như món quà được gói bằng sự suy nghĩ và cột bằng tình yêu 

- Anh nghĩ thánh Valentine là một người đàn ông tuyệt vời khi ông cho anh cơ hội nói tiếng yêu em. 

- Em có biết không, nụ hôn là khoảng cách ngắn nhất giữa hai người đấy! 

- Trong phép tính của tình yêu, 1 + 1 = tất cả, còn 2 – 1 = 0 

- Nếu bị ép buộc phải nói vì sao anh yêu em, anh chỉ có thể trả lời: “Vì đó là em. Vì đó là tôi!” 

- Anh đã chẳng bao giờ biết đến sự sùng bái cho tới khi anh biết anh yêu em. 

- 3 - 2 = 1 trái tim cầu nguyện cho em; 1 + 1= 2 con mắt tìm em; 3+2= 5 giác quan nhớ em; 5+2= 7 ngày trong tuần mơ về em; 7+5= 12 tháng cầu phúc cho em 

- Thú thật với em, anh không có lời lẽ để khiến em yên tâm hơn nhưng anh có đôi tay ôm em thật chặt, có đôi tai để nghe những gì em tâm sự và có trái tim, một trái tim luôn mong thấy nụ cười em trong ngày này. 

- Ta cùng chia sẻ thế giới nào. Biển cả của em, sóng gào của anh. Trời xanh của em, sao mờ của anh. Mặt trời của em, tia sáng của anh. Mọi thứ của em, và em của anh… 

- Gửi em chiếc giường để em yên ngủ, chiếc gối để em thoải mái và chiếc chăn để em ấm áp. Anh chẳng thể ngủ được vì anh đã gửi cho em tất cả những gì anh có. Chúc em ngủ ngon. Anh yêu em. 

- Dành một chỗ cho anh trong trái tim em chứ không phải trong đầu em vì trí óc dễ quên nhưng trái tim luôn nhớ. Anh yêu em. 
Thêm một vài tin nữa nhé: 

- Anh yêu tất cả sao trên bầu trời nhưng chúng có nghĩa gì đâu khi so sánh với những ngôi sao trong mắt em 

- Nói cho anh biết em được cấu thành từ những chất gì? Bởi vì anh đã trộn 100kg đường với 80kg sô cô là và 60 kg mật ong, thế mà chẳng thể tạo ra thứ gì ngọt hơn em. 

- Có những người chết sớm vì ông trời yêu họ nhiều quá… Em biết không, em vẫn còn tồn tại trên đời này vì có người đã yêu em nhiều hơn ông trời đấy… 

- Nếu nụ hôn là nước, anh sẽ cho em biển cả. Nếu nắm tay nhau là lá anh sẽ cho em cả rừng cây.Nếu em yêu một hành tinh anh sẽ cho em cả thiên hà. Nếu yêu như là sống, anh sẽ cho em cả cuộc đời này 

- Khách hàng thân mến, xin vui lòng cân đối lại tài khoản hôn của mình. Bạn sẽ được 2 nụ hôn và 3 phút ôm ghì miễn phí. Khuyến mãi hết hạn vào ngày 27/09/2008 

- Nếu em ở trong một căn phòng tối, nhìn thấy xung quanh đều là máu và những bức tường đang rung chuyển, thì đừng lo sợ nhé, em yêu. Em đang ở một nơi an toàn nhất. đó là trái tim anh. 

- Chiếc chìa khoá nhỏ có thể mở ổ khoá lớn, lời nói đơn giản có thể biểu lộ tư tưởng vĩ đại và chỉ một tin nhắn của em sẽ khiến anh vui cười suốt cả ngày. Nhớ em. 

- Thi thoảng mắt anh ghen tị với tim anh. Em có biết vì sao không? Vì em luôn kề cận với trái tim anh và xa khỏi tầm mắt anh đấy. 

- Một nụ hôn chỉ là một nụ hôn cho tới khi em tìm thấy người em yêu. Một cái nắm tay chỉ là một cái nắm tay khi em tìm thấy người mà em luôn nghĩ đến. Một giấc mơ mãi chỉ là giấc mơ cho tới khi nó thành sự thật. Và tình yêu chỉ là lời nói cho tới khi anh nghe thấy nó từ em. 

- Nếu hoa hồng màu đen và violet màu nâu thì tình yêu của anh dành cho em sẽ không bao giờ được nhận thấy. Nhưng hoa hồng màu đỏ và violet màu xanh, nên tất cả những gì anh muốn nói là anh yêu em. 
Tiếp nữa nè: 

- Ước gì giờ này anh ở bên em, ôm em thật chặt thay vì nói câu này: “Chúc em ngủ ngon!” 

- Thầy Toán dạy anh 1 giờ = 60 ph, 1 phút = 60 giây, nhưng thầy chẳng nói với anh 1 giây không có em lại bằng tới 100 năm. Nhớ em! 

- Trái tim đập rộn ràng… Tâm trí ghi nhớ mãi… Sa mạc có thể thay bằng đại dương. Nhưng không gì có thể ngăn được nụ cười khi anh thấy tên em hiện trên máy anh. 

- Mặt trăng nhìn anh và hỏi ” nếu người yêu bạn không gửi tin nhắn, bạn có bỏ cô ấy không? Anh trả lời “Thế bầu trời có bỏ bạn không nếu bạn không chiếu sáng?” Hoan nghinh anh đi nào! 

- Anh sẽ xuống địa ngục vì tội lỗi của mình nhưng anh muốn đi cùng em, bởi vì chỉ có em mới có thể biến địa ngục thành thiên đường với sự ngọt ngào của mình! 

- Hãy để giấc mơ tươi đẹp nhất đến với em tối nay. Hãy để con người ngọt ngào nhất bờc vào giấc mộng ấy tối nay…. Nhưng đừng mong đây là thói quen, vì anh không phải tối nào cũng rảnh… 

- Trời ạ, anh tin em vô cùng nhưng tại sao em lại đi kể cho người khác nghe bí mật của anh? Tại sao gặp ai em cũng bảo anh là người ngọt ngào nhất? 

- Đừng nói yêu anh nếu như em không muốn, bởi vì có lẽ anh sẽ làm điều gì đó ngu ngốc… như tin vào tình yêu đó chẳng hạn. 

- Anh nhìn thấy mặt trời lặn và nghĩ đến em. Anh nhìn thấy tất cả và nghĩ đến em. Một cái hẹn, một cơ hội là những gì anh mong muốn. đến với anh em nhé 

- Bảng chữ cái bắt đầu bằng ABC. Số đếm bắt đầu bằng 123. Tình yêu bắt đầu bằng anh và em. 

- Đam mê là một từ bao gồm rất nhiều cảm xúc. Anh nhận ra điều này, khi ta nắm tay nhau, khi ta hôn nhau, khi anh nhìn em. Bởi vì em là đam mê của anh. 
Một vài tin nhắn cho nỗi nhớ: 

- Đố em noh ssiW nghĩa là gì? Chỉ cần xoay ngược lại điện thoại, em sẽ biết ngay. Anh nhớ em! 

- Anh sẽ viết lên trên tất cả các viên gạch dòng chữ anh nhớ em và anh ước gì một viên sẽ rơi trúng đầu em, để em biết được nỗi đau như nào khi nhớ đến người đặc biệt như em 

- Mỗi lúc anh nhớ em, một ngôi sao rụng xuống. Nếu em nhìn lên trời và chẳng thấy ngôi sao nào cả, bởi vì em bắt anh nhớ em quá nhiều 

- Người ở gần thì không thân (yêu). Người thân yêu thì không ở gần. Nhớ người ở gần sao quá dễ. Quên người thân yêu sao khó quá. 

- Trắng: Tĩnh lặng. Xanh: tươi mát. Đỏ: nồng nàn. Hồng: Đáng yêu. Tím: chung thuỷ. Nâu: chín chắn. Đen: Thông minh. Vàng: Quý phái. Anh là màu nào trong trái tim em? 

- Ngày chẳng có ý nghĩa gì nếu không có mặt trời. Đêm chẳng có ý nghĩa gì nếu thiếu mặt trăng. Biển chẳng có ý nghĩa gì nếu không có nước. Anh có ý nghĩa gì nếu thiếu em? 

- Nếu em đang muốn khóc: Hãy gọi anh. Anh không làm em cười được nhưng có thể khóc cùng em. Nếu em muốn bỏ đi xa: Hãy gọi anh. Anh không yêu cầu em ở lại nhưng có thể đi cùng em. Nếu em muốn nghe: Hãy gọi anh và anh hứa sẽ cùng yên lặng với em. Nhưng… nếu một ngày em gọi anh và không ai trả lời. Hãy đến nhanh với anh. Bởi vì anh đang cần em. 

- Đừng khép cửa khi em cô đơn. Đừng khép lòng khi em muốn tình yêu. Đừng khép đôi tay khi em cần anh. Vì anh sẽ ôm em cho đến hết đời. 

- A B C D E F G H I J K L M N O P Q R S T U… Z. Người sáng tạo ra bảng chữ cái là một thiên tài nhưng cũng hết sức ngốc nghếch khi đặt “U” và “I” quá xa. 

- Hút thuốc mỗi ngày sẽ chết sớm 10 năm. Uống rượu mỗi ngày sẽ chết sớm 30 năm. Nhưng yêu em,… Anh đang chết mỗi ngày đấy. Đáng thương chưa? 
Tin nhắn cho người đang yêu: 

- Có 12 tháng một năm…30 ngày một tháng…7 ngày một tuần…24 giờ một ngày…60 phút một giờ…Nhưng chỉ có một là em thôi trong đời anh. 

- Có 2 lí do tại sao anh thức dậy vào buổi sáng: Đồng hồ báo thức và em. 

- Những tư tưởng lớn có các ý tưởng, giải pháp, và nguyên nhân; những bộ óc khoa học có các công thức, lý thuyết và con số; tâm trí anh chỉ có mình em. 

- Tình yêu có thể biểu lộ bằng nhiều cách. Một cách anh biết đó là gửi tình yêu băng qua khoảng không gian đến với người đang đọc tin nhắn này. 

- Có Đêm nên mới quý Ngày. Có Buồn nên mới trân trọng Vui. Có Ác nên mới mong Thiện. Có Em nên anh mới mong Tình Yêu 

- Hôm nay trông em tuyệt vời quá. Vì sao anh biết à? Bởi vì em lúc nào mà không tuyệt vời! 

- Tình yêu là gì? Người không thích gọi là trách nhiệm. Người chơi bời gọi là game. Người không có gọi là giấc mơ. Người hiểu biết gọi là số phận. Còn anh, anh gọi tình yêu là em. 

- Tình yêu là gì? Tình yêu chính là điều khiến điện thoại của em lên tiếng chuông mỗi khi anh gửi tin nhắn 

- Nếu chỉ cần nhắm mắt lại là có thể tránh được tình yêu thì anh sẽ không một nháy mắt vì không muốn để mỗi giây trôi qua đánh mất tình yêu từ em 

- Có những người có năng khiếu trời cho. Họ có thể làm nhiều điều tốt đẹp bằng kỹ năng, kiến thức và chuyên môn của mình. Nhưng không ai có thể tài năng bằng em. Chỉ cần em đến gần, sắc đẹp đã hiển hiện. 

- Điện thoại di động lắm lúc khiến ta bực mình lắm. tiền cước nè, xạc pin nè, thi thoảng tin nhắn lại bị kẹt. Nhưng có một điều khiến anh yêu nó: nó kết nối anh và em 

- Từ ngữ bắt đầu bằng ABC. Số đếm bắt đầu bằng 123. Âm nhạc bắt đầu bằng Do, Re, Mi. Tình yêu bắt đầu bằng anh và em! 

- Mưa và nắng thường không cùng xuất hiện. Ngày và đêm chẳng bao giờ trùng phùng. Nhưng anh và em, bất kể người ta nói gì, vẫn luôn thật xứng hợp 

- Có hàng ngàn cây số giữa chúng ta. Núi, rừng, sông, suối ngăn cách. Anh chẳng phải là siêu nhân nhưng hãy cho anh một phút nhé. Anh sẽ gửi vào không gian để đến em tình yêu của anh. Em đã nhận được chưa? 

- Anh đang thực thi nhiệm vụ: “dụ dỗ” em. Nói một cách khác, nhiệm vụ bất khả thi! 

- Anh ước là giọt lệ trên mắt em, để lăn tròn trên má và đọng lại trên môi em. Nhưng anh không bao giờ muốn em là giọt lệ trong mắt anh vì anh sẽ đánh mất em ngay mỗi lần anh khóc 

- Khi trời mưa, em chẳng thấy mặt trời nhưng mặt trời vẫn ở đó. Hi vọng chúng ta cũng như thế. Chúng ta không thường xuyên nhìn thấy nhau nhưng chúng ta vẫn nghĩ về nhau. 

- Có lẽ anh sẽ hết tin nhắn đẹp để gửi cho em. Có lẽ anh cũng sẽ hết chuyện vui dành cho em. Có lẽ điện thoại anh hết pin hay thẻ chẳng còn tiền. Thế nhưng trái tim anh sẽ không bao giờ hết chỗ dành cho em. 
Nữa nè: 

• Sherlock Holmes chỉ là một tên ngốc và Robert Watt chỉ là một gã khờ. Một người là thám tử, một người là người tạo ra radar. Nhưng chẳng ai phát hiện ra em cả. Anh mới là thiên tài. 

• Có những lúc anh chẳng thể cười được nữa, đừng lo lắng cho anh nhé, anh biết mình phải làm gì. Anh chỉ cần nhìn vào một góc và nghĩ về em. Chẳng ai có thể làm cho anh hạnh phúc như em cả. 

• Ôi anh quên mất tên em rồi. anh gọi em là “người yêu” nhé! Nếu em cũng quên tên anh luôn, thì cứ gọi anh là “người yêu” 

• Nếu em cảm thấy cô đơn và em nghĩ chẳng có ai để yêu, để nâng đỡ, lắng nghe hay biểu lộ sự quan tâm, em hãy lưu lại tin nhắn này và mỗi lúc đọc, nó sẽ gợi cho em nhớ em là một phần của anh và anh không bao giờ xa em cả. 

• Anh sợ nhắm mắt lại vì anh sẽ nghĩ tới em. Anh sợ mở mắt ra vì anh sẽ nhìn thấy em. Anh sợ cử động đôi môi vì anh sẽ nói về em. Anh sợ lắng nghe vì trái tim anh đang thúc nhịp vì em. 

• Mỗi khi anh nghe thấy chuông báo tin nhắn, anh luôn hy vọng là của em. Điện thoại của anh có thể hạn chế bộ nhớ nhưng trái tim anh chẳng khi nào thiếu chỗ dành cho em 

• Nếu em ghét anh, hãy dùng cung tên bắn anh nhưng đừng nhắm vào trái tim anh em nhé. Vì em luôn ở nơi đó! 

• Anh cho em mượn bờ vai để em gục đầu khóc, mượn đôi tai để lắng nghe, đôi tay để em xiết chặt, đôi chân để đi cùng em. Nhưng anh không thể cho mượn trái tim mình vì nó đã thuộc về em mất rồi! 

• Anh nhận tin nhắn của công ty điện thoại, công ty nước, công ty điện lực nhưng chẳng có tin nhắn nào từ em cả. Tệ thật, khi anh mong muốn nhất những gì thuộc về em 

• Anh ghét em cười vì em làm anh điên lên vì em. Anh ghét em nói vì em làm anh lạc mất ngôn từ. Anh ghét em khi anh nhìn em vì em làm anh yêu em nhiều hơn nữa. Ghét lắm! 
Những nụ cười cho buổi sáng tốt lành: 

- Sáng nay anh thức dậy và nghĩ đến những điều đã quên làm. Anh ngồi dậy, lấy máy điên thoại và gửi đến em một lời chúc cho buổi sáng. Một ngày làm việc vui vẻ em nhé! 

- Một ngày nào đó em sẽ tìm thấy người sẽ cùng em ngắm mặt trời mọc cho đến tận hoàng hôn của cuộc đời. Người đó là anh đấy em à! Ngày vui! 

- Sáng nay anh thức dậy, chợt bật cười khi nghĩ đến mối quan hệ của chúng ta. Bởi vì anh biết chắc từ bây giờ trở đi, anh sẽ thức dậy mỗi buổi sáng với nụ cười trên môi vì lý do tương tự. 

- Sáng nay, Ông trời nhìn anh cười qua những tia nắng bình minh. Anh chia sẻ với em niểm vui này khi gửi đến em tin nhắn này, như một nụ cười ấm áp để em không cần nhìn thấy cũng có thể cảm thấy 

- Trong tất cả các nụ cười em nhận được hôm nay, có một nụ cười em không hề nhìn thấy. một nụ cười không đến từ môi mà từ trái tim. Một nụ cười từ tin nhắn này của anh 

- Đôi khi cuộc sống bận rộn đến mức chúng ta chẳng thể tìm ra thời gian để nói cám ơn ai đó đã quá chừng tử tế và tuyệt vời. Cám ơn em! 

- Mỗi ngày là một ngày hạnh phúc khi nhận được tin nhắn từ em. Anh không nói dối em đâu. Một tin nhắn từ em luôn làm anh tươi cười. 

- Người ta xuẩt hiện-biến mất. Người ta cười-khóc. Người ta bỏ cuộc-cố gắng. Người ta chào gặp mặt-chia tay. Người ta quên…nhưng anh nhớ. Một buổi sáng tốt lành em nhé! 

- Mỗi buổi sáng là một khởi đầu mới, mong ước mới, hy vọng mới. HÔm nay là một ngày tuyệt vời vì là món quà do ông trời ban tặng. Em hãy nhận lời chúc này cho một ngày hoàn hảo. Good morning! 

- Tin nhắn này chẳng có chất béo, cholesterol hay các chất phụ gia, hoàn toàn chiết xuất từ tự nhiên, ngoại trừ có rất nhiều đường. Nhưng chắc chắn nó chẳng bao giờ ngọt hơn người đọc nó. Cười lên em nhé! 
Gửi một chút nồng nàn vào đêm: 

- Khi màn đêm buông xuống, xin em hãy gạt qua một bên những lo lắng buồn phiền. Khép mắt lại để đi vào giấc ngủ, vì tất cả những khoảnh khắc tốt đẹp nhất đang đến với em: Bên anh và những giấc mơ ngọt ngào nhất. 

- Đêm yên tĩnh nhưng anh chẳng ngủ được. có lẽ vì anh đang chờ tiếng chuông báo của điện thoại. trước khi đi vào giấc mơ, anh luôn muốn có được tin nhắn của em. 

- Em chính là nguyên nhân khiến anh có những đêm không ngủ. Em chính là nguyên nhân khiến anh ôm chiếc gối thật chặt. Và em chính là nguyên nhân khiến anh trước khi đi ngủ phải gửi đi tin nhắn. Ngủ ngon, em nhé! 

- Chắc em nghĩ anh đã quên em. Chắc em nghĩ anh đã chẳng quan tâm và chắc em nghĩ anh không còn nghĩ về em nữa. Em sai rồi. Em vẫn luôn trong giấc mơ của anh. 

- Một ngày của anh sẽ không chấm dứt khi anh còn có việc phải làm. Hihihi, anh chỉ không ngủ được khi chưa nói tiếng yêu em. 

- Em đừng thường xuyên nhắn tin. Em đừng nhắn tin nhiều thế. Em đang khiến anh buồn vì xa một vòng tay. Anh nhớ em quá! 

- Mỗi lần anh nhắn tin cho em, tin nhắn không chỉ là lời tán tụng. Có một tin nhắn không lời đã gửi đi: Anh sẽ nghĩ đến em vào mỗi sáng thức dậy. Nhớ em! 

- Làm điều này giúp anh nhé? Đặt bàn tay trái lên vai phải và bàn tay phải lên vai trái… Đó, anh vừa mới ôm em vào lòng. Nhớ em! 

- Anh biết ngay bây giờ em nghĩ về anh và em cũng đang có bao nhiêu việc phải giải quyết. Anh hi vọng em biết rằng mọi lúc em bận rộn nhất, anh cũng đang trông tin em. Đây không chỉ là sự lo lắng. Anh nhớ em! 

- Anh có lẽ sẽ vắng mặt trong một phút, trong nhiều giờ, trong nhiều ngày. Anh có lẽ sẽ chúc em buổi sáng, buổi trưa hay buổi tối tốt lành. Nhưng anh sẽ chẳng bao giờ nói lời chia tay với em đâu, người yêu bé nhỏ và ngọt ngào ơi 
Khi nhớ một nụ cười của một người: 

- Đừng bao giờ cảm thấy mệt mỏi vì đã làm những điều nho nhỏ cho người khác, vì chúng thực sự mang nhiều ý nghĩa trong cuộc sống. Đó là lý do tại sao anh không bao giờ mệt mỏi khi gửi cho em lời yêu thương. 

- Chúng ta không gần tay với nhưng các tin nhắn khiến trái tim ta rộn ràng, trí óc ta bay bổng và luôn khiến anh hình dung được nụ cười ngọt ngào của em. 

- Đây là lời bác sĩ khuyên: Ăn sáng đều đặn, uống nhiều nước, đừng quên vitamine C và nhắn tin cho anh ít nhất 3 lần/ ngày. 

- Nụ cười là thứ ngôn ngữ mà ai cũng hiểu. Nó chẳng tốn gì mà lại tạo ra rất nhiều. Nó diễn ra nhanh nhưng ký ức về nó luôn vĩnh viễn. Anh nhớ nụ cười của em! 

- Một miếng đá cho trái dâu thêm ngọt, một sợi dây cho quả bóng bay cao, một que diêm cho cây nến sáng tỏ. Và tin nhắn này để “thấy” nụ cười em! 
Tin nhắn cho nhớ và quên: 

- Có người nói thật khó để nhớ, còn có người lại nói thật khó để quên. Vì thế nhớ đừng quên anh và đừng quên nhớ anh nhé! 

- Anh chóng quên lắm! Anh không bao giờ nhớ nổi một gương mặt đã qua. Nhưng vì em anh sẽ tạo ra một ngoại lệ. 

- Rồi sẽ một ngày em quên anh…tên anh…giọng nói anh…anh là ai và là gì với em…Nhưng ngay như thế anh vẫn muốn em biết…Anh sẽ chẳng bao giờ quên em. 

- Người ta bảo tha thứ và quên đi. Nhưng nếu ai đó đáng tha thứ thì anh sẽ chẳng thể quên được người đó, em à! 

- Món quà lớn nhất mà ta có thể cho một người chính là thời gian! Bởi vì ta đang trao tặng một phần đời sẽ chẳng quay lại của ta. Đừng quên nhé, em đang nhận thời gian của anh đó. 
Lại gửi đi nỗi nhớ cho nàng: 

- Bất cứ khi nào nhớ em, anh không tìm hình ảnh em trong giấc mộng hay giọng nói của em trong tin nhắn đâu. Anh sẽ đặt bàn tay phải lên ngực và sẽ cảm thấy em 

- Mỗi giọt lệ là một dấu hiệu đổ vỡ, mỗi sự im lặng là dấu hiệu cô đơn, mỗi nụ cười là dấu hiệu tử tế, mỗi tin nhắn là một dấu hiệu nhớ nhung. Anh nhớ em! 

- Sự vắng mặt của em kéo dài đủ để có người nhớ em nhưng không kịp để thằng bé nhận thấy nó vui vẻ thế nào khi sống thiếu em. 

- Một giọt mưa rơi có thể quá nhỏ bé với mắt nhìn nhưng đâu đó có một bông hoa đang khát khao chờ đợi. Một tin nhắn dường như quá nhỏ bé nhưng nơi đây có một trái tim đang nhớ em khi nhận được nó. Giữ liên lạc em nhé! 

- Khi anh nhìn đàn kiến bò trên tường, anh nhận thấy dù bận rộn thế nào đi nữa, chúng vẫn liên lạc với nhau. Hy vọng ta cũng thế em nhé! 

- Điều khiến ai đó đáng yêu hơn không chỉ vì niềm hạnh phúc mà ta cảm thấy khi ta gặp họ mà còn là khoảng trống mà ta cảm nhận khi họ không ở gần ta. Anh nhớ em. 

- Một lời tạm biệt đơn giản khiến ta khóc, một lời nói đùa đơn giản khiến ta cười, một quan tâm đơn giản khiến ta yêu. Anh hi vọng tin nhắn đơn giản này khiến em nghĩ đến anh. Nhớ em lắm! 

- Những kỷ niệm luôn đóng vai trò quấy rối. Chúng khiến ta cười khi nhớ đến thời gian ta khóc cùng nhau. Nhưng chúng khiến ta rơi lệ khi nhớ đến lúc ta cười cùng nhau 

- Nhắm mắt lại… thả lỏng toàn thân và nín thở càng lâu càng tốt. bây giờ thở ra đi cưng… anh nhớ em nhiều như em cần không khí để thở vậy 

- Đừng quên có người ở nơi này đang cầu chúc cho em hạnh phúc khi mỗi vì sao băng. Anh nhớ em! 
Gửi nhau tiếng yêu thương: 

- Anh viết tên em trên bãi cát và sóng biển đã cuốn trôi. Anh viết tên em lên không trung và gió thổi đi mất. Anh viết tên em vào trái tim và anh… đã bị đau tim. 

- Trong cuộc sống anh đã học được cách yêu thương, vui cười, hạnh phúc, mạnh mẽ, tích cực, trung thực, chân thành, vị tha nhưng anh đã không thể học được cách đừng nhớ đến em nữa 

- Anh biết phía sau nụ cười em là những nỗi buồn, phía sau tiếng cười của em là những giọt lệ nhưng anh muốn em biết rằng phía sau em chính là anh, người luôn quan tâm đến em 

- Hi! Điện thoại của em bị hư à? Đã nhiều lần anh gọi nhưng lần nào nó cũng trả lời: Thuê bao quý khách vừa gọi đang cố gắng đến gần hơn trái tim quý khách 

- Khi nhìn vào bầu trời đêm, nếu nhìn thấy một vì sao băng em hãy lên tiếng nguyện cầu nhé. Tin anh đi. Điều em nguyện cầu sẽ thành sự thật, vì anh đã từng làm như thế và đã gặp được em 
Gặp nàng,… chia tay về nhà, lúi húi nhắn tin gửi đi: 

- Em có nhìn thấy anh không? Phía trước? Phía sau? Bên trái? Bên phải?… chắc là không rồi. nhưng anh thấy em rất rõ, vì anh đang đặt bàn tay lên trái tim mình 

- Anh đang có một ngày cực kỳ tồi tệ và anh thường cảm thấy tốt hơn khi nhìn thấy nụ cười của một cô gái xinh đẹp. anh đã đỡ hơn rồi nhưng giá mà anh nhìn thấy nụ cười em một lần nữa nhỉ? 

- Anh thích rất nhiều nhưng yêu rất ít. Nhưng chẳng ai có thể ngọt ngào hơn em được, cưng à. Anh sẵn sàng đứng vào trong dãy người xếp hàng đến tận cùng thế giới để chờ đến giây phút vui vẻ cùng em. 

- Anh hi vọng cuối cùng em hiểu anh yêu em suốt trọn đời này vì em không chỉ là người con gái trong tim anh mà là người bạn thân nhất của anh 

- Nếu em sống đến 100 tuổi, anh muốn sống 100 tuổi cộng 1 ngày, vì anh không phải sống một ngày nào thiếu em… 

- Theo tiếng gọi của trái tim, anh đã đến với em. Khi quay về anh đã bỏ quên cái gì đó mất rồi. À, những suy nghĩ của anh vẫn còn ở bên em. 

- Anh mở ví ra và thấy nó trống không. Anh sờ túi áo và hai túi quần chỉ thấy vài đồng xèng. Đưa tay lên ngực anh thấy em ở đó. Ôi, anh giàu có biết bao… 

- Anh sẽ từ bỏ niềm vui riêng để chẳng bao giờ thấy em buồn. anh sẽ từ bỏ ảo tưởng tiếng tăm để bên em thường xuyên. Anh sẽ từ bỏ cuộc sống của mình để làm mới cuộc sống chúng ta… Anh sẽ từ bỏ mọi điều… ngoại trừ em… 

- Đôi khi tìm kiếm từ ngữ trở nên khó khăn, để viết xong dòng chữ cho em biết em luôn ở trong tâm trí của anh. Mới xa nửa tiếng thôi lại nhớ em rồi! 
Tin nhắn sau khi gửi tặng quà, hoa cho nàng 

☻Những bông hồng lặng lẽ thố lộ tình yêu bằng ngôn ngữ của trái tim 

☻Trong mơ ước và trong tình yêu, không có gì là không thể 

☻Những gì liên kết chúng ta lại với nhau luôn mạnh mẽ hơn những gì làm chúng ta xa cách 

☻Giấc mơ chẳng tốn đồng nào cả, trừ phi em muốn nó trở thành sự thật. 

☻Con bướm cần đến đôi cánh… viên đá cần thời tiết lạnh còn anh… anh cần em 

☻Yêu thương ơi… Anh muốn ôm em thật chặt để nghe trái tim chúng ta đập cùng một nhịp… mãi mãi 

☻Điều gì xảy ra khi những cánh hoa này thiếu mặt trời, những cành lá tươi tắn này thiếu nước. điều gì sẽ xảy ra khi anh thiếu em. Đó là lý do tại sao anh nói… Anh yêu em 

☻Một cuốn lịch làm quà cho em với những ngày, tháng ta sẽ chia sẻ ngọt bùi bên nhau… Nếu thiếu nhau sẽ chẳng còn niềm vui, chỉ còn nỗi đau! 

☻Từ ngữ dù đặc biệt đến đâu cũng chẳng bao giờ diễn tả được tất cả tình yêu anh dành cho em với trái tim này. 

☻Quà tặng nhiều món khác nhau, gói trong giấy màu khác nhau nhưng tình yêu này chỉ có một, không bao giờ thay đổi 

☻Anh yêu hai điều, cành hồng này và tình yêu của em. Bông hồng chỉ cho thời gian ngắn nhưng tình yêu của em là cả trọn đời 
Khẳng định ngắn gọn và chẳng cần nói thêm điều gì khác nữa 

☻Chụt… một nụ hôn qua điện thoại nè… hãy để điện thoại cạnh bên tai em nhé! 

☻Tình yêu như chiến tranh… dễ dàng bắt đầu… khó khăn kết thúc… không thể quên được… 

☻Nếu anh được 1000đ thôi cho mỗi lần nghĩ về em, thì dù có chia tay nhau, anh cũng sẽ là tỉ phú. 

☻Nếu anh chết và bay lên trời cao, anh sẽ đặt tên em trên một ngôi sao bằng vàng để tất cả các tiên nữ đều có thể thấy được, em có ý nghĩa như thế nào với anh 

☻Mỗi tin nhắn là một nụ cười… Mỗi con chữ là một nụ hôn nhưng khi em chạm vào anh… hãy nhớ lấy điều này… cuộc đời anh đang ngập tràn hạnh phúc. 

☻anh không thể sống thiếu tình yêu. Em chính là tình yêu, vì thế anh không thể nào sống thiếu em 

☻Hoa hồng cháy đỏ rực trong tim anh và chúng chẳng bao giờ khô héo cả… vì chúng nở tung mỗi lần anh thấy nụ cười em, nghe thấy giọng nói em và nghĩ về em 

☻Anh không thể ngăn được nước mắt phụ nữ, đó là lý do tại sao anh sẵn lòng làm mọi điều vì em 

• Nếu có thể trở thành một phần của em, anh sẽ chọn là giọt lệ. để được hình thành từ trái tim em, sinh ra trong mắt em, sống trên má em và chết trên môi em 

• Chính phủ vừa ban những thuế mới, hẹn hò, ôm nhau, hôn nhau và yêu nhau đều phải đóng thuế. Nhưng đừng lo em nhé, tán tỉnh thì free hoàn toàn. Em có nghĩ là anh đang tán em? 

• Em nhìn đáng yêu khi đọc tin nhắn của anh. Em càng đáng yêu hơn khi đọc tin nhắn của anh và mỉm cười. em đáng yêu nhất khi đọc tin nhắn của anh, mỉm cười và hồi âm. Nào hãy là người đáng yêu nhất đi em! 

• Này cô gái, cô thật là người bất cẩn. Cô luôn đến và để quên lại nhiều thứ sau lưng. Bây giờ nhìn xem cô để lại những gì? Cô bước vào tâm trí tôi và cô đã để lại trên gương mặt tôi một nụ cười 

• Nếu có một điều ước, anh cũng sẽ chẳng ước em yêu anh, bởi vì anh không muốn tình yêu của em đến từ một lời ước… mà phải đến từ trái tim em cơ 

* Đây là tin nhắn thứ mấy anh gửi cho em rồi nhỉ? Hình như 1001 tin nhắn rồi thì phải, anh cũng ko biết nữa. Chỉ biết rằng cứ mỗi tin nhắn, anh lại gửi một chút yêu thương của mình vào trong đó. 

* Tình yêu là khi ta dành thời gian trong ngày nghĩ về người khác nhiều hơn nghĩ về chính bản thân mình. Sao anh nghĩ về em nhiều thế nhĩ? 

* Có thể anh không phải là người đẹp trai nhất trên thế giới, cũng không phải là người thông minh nhất, nhưng anh biết anh là người may mắn nhất vì anh có em. 

+ Làm sao em có thể bắt trời không mưa khi trên trời dày đặc mây đen ? Làm sao em có thể bắt lá vàng không rụng khi mùa thu đã tới ? Làm sao em có thể bắt anh không yêu em khi em có trên đời này ? 

+ Mọi người dạy cho anh biết rằng một giờ có 60 phút, một phút có 60 giây, nhưng không ai dạy anh rằng một giây thiếu em là một giây bất tận, một phút vắng em là một phút vĩnh hằng. 

+ Em yêu, anh tìm thấy thiên đường rồi …. từ khi gặp em… anh tin là thiên đường có thật và em là thiên thần của anh. 
7 ngày 7 tin nhắn hơi “ngớ ngẩn” nhưng ngộ nghĩnh và dễ tiếp nhận: 

1. Có gì khác biệt giữa nụ cười của anh và của em? Em cười khi em hạnh phúc, còn anh cười khi em hạnh phúc. 

2. Nếu anh chạm tay em, em nắm lấy chứ? Nếu anh khoác tay em, em ngả đầu vào bên vai anh ko? Nếu anh chạm vào môi em, em hôn anh chứ? Nếu anh chiếm giữ tim em, em có yêu anh ko? 

3. Đây là lúc anh cầu nguyện cho em….0123456789…xong rồi! Em biết anh cầu gì không? Xin trời phật cho em vui vẻ cả ngày… để tin nhắn cho anh ngọt ngào như em vậy 

4. Mơ về em khiến một đêm dài đáng giá. Nghĩ về em khiến anh mỉm cười. Có em bên cạnh là điều tuyệt vời nhất và yêu em là…kế hoạch cả đời anh 

5. Anh nghe nói thượng đế tạo ra thế giới trong 6 ngày. Nhưng chắc chắn ngài sẽ mất nhiều thế kỷ để tạo ra một người ngọt ngào, xinh đẹp và đáng yêu… như em 

6. Ngày xửa ngày xưa, có chuyện đã xảy ra với anh. Đó là điều ngọt ngào nhất trên đời này, là giấc mơ đẹp đẽ nhất. giấc mơ đã thành sự thật vào ngày anh gặp em7. Em ngọt như rượu Bailey, nồng đậm như Tequila, ấm áp như Cognac, lạ lùng như Malibu và đặc biệt như Champagne. Em như một loại cocktail dễ say. Anh thật sự say vì em rồi. 
Anh nhớ em! 

1. 1 trái tim, 2 con mắt, 7 lít máu, 206 cái xương, 5,5 triệu hồng cầu, 60 tỉ tỉ DNA trong anh đang nói với em: “Anh nhớ em” 

2. Chẳng có gì đặc biệt cho tin nhắn này. Anh chỉ muốn có riêng mình một khoảnh khắc trong cuộc sống quá chừng bận rộn của chúng ta và hy vọng anh có thể khiến em cười khi nói rằng “Anh nhớ em” 

3. Sẽ có người giống em, có hàng triệu cách làm anh vui vẻ và buộc anh phải để em đi…. Anh vẫn sẽ tìm ra hàng triệu lý do để em ở lại. Anh nhớ em 

4. Hôm nay anh thức dậy với nỗi đau trong lòng. Anh không biết nó từ đâu đến cho đến khi trí óc anh nhắc anh rằng đó là nỗi đau mang tên “Nhớ em”. Anh nhớ em lắm! 

5. Đừng lo âu vì ngày mai, anh sẽ luôn nhớ em và đó là một lời hứa. Anh mãi mãi nhớ em. 

6. Bất cứ khi nào nhớ em, anh sẽ nhắm mắt lại để thấy em trong giấc mơ, hay đọc tin nhắn để nghe thấy tiếng em. Anh đang đặt bàn tay phải lên trái tim và cảm thấy em… Anh nhớ em quá, nhỏ à!… 

7. Anh biết em rất b-ậ-n-r-ộ-n nhưng hãy để ra 3 giây để nghĩ đến anh. 1…2…3…NGọt ngào quá đi thôi. Em tiếp tục làm việc đi. Anh nhớ em! 
Em là cuộc sống 

1. Nếu ai đó hỏi anh cuộc sống tuyệt đẹp là như nào, anh sẽ áp đầu vào ngực em, ôm em thật chặt và trả lời với một nụ cười: “Như thế này!” 

2. Cuộc sống đôi khi là một con đường gian khổ mà ta cảm thấy mọi chuyện đều không thuận lợi. Nhưng đừng từ bỏ con đường ấy chỉ vì nghĩ em chỉ một mình. Hãy ngoái đầu lại đi, anh đang đi cùng em đó! 

3. Người ta bảo nếu có ít nhất một người quan tâm đến mình thì cuộc sống này chẳng uổng phí. Vì thế nếu gặp chuyện chẳng lành, cảm thấy chán nản, hãy nhớ là em còn có anh. 

4. Anh sẽ đi bên em suốt cuộc đời này với chỉ một điều kiện: Em giấu đi đôi cánh của mình nhé! Vì thế gian này ai cũng biết em là thiên thần. 

5. Anh thường nghĩ cuộc đời này chẳng công bằng chút nào, khiến anh có nhiều lý do ghét nó. Nhưng giờ đây anh làm sao chối bỏ thế giới tuyệt diệu này khi nó ban tặng em cho anh