Trochę popsuję zabawę...

Na początek spróbuj zapomnieć o tym co przeczytałeś powyżej, bo ilość fatalnych praktyk czy zapisów wręcz wypaczających podstawowe założenia OOP jest tam ogromna.
1. Chyba najbardziej elementarna zasada OOP - [url=http://en.wikipedia.org/wiki/Single_responsibility_principle]zasada pojedynczej odpowiedzialności (swoją drogą już chyba sety raz wrzucam ten link na tym forum). Jeśli to spieprzysz to z góry spieprzyłeś cały projekt. Zastanów się czy widziałeś kiedyś artykuł (kartkę papieru z tekstem) który jest w stanie sam się utworzyć, sam się zniszczyć i do tego prezentować sobą jakieś informacje? Ja nie, Ty pewnie też. Wszystko dlatego, że artykuł jedyne co robi to reprezentuje jakąś informację, natomiast za jego tworzenie odpowiedzialna jest drukarka, która wykorzystuje czyste (nie wypełnione informacjami) kartki. Nawet niszczenie to często zadanie innej maszyny - niszczarki albo Twoich rąk. Tak samo jest tutaj.
Article jedyne co robi to reprezentuje dane. Jakiś
ArticleManager odpowiedzialny jest za utrwalanie i usuwanie owych artykułów ze źródła (np. bazy danych). Możesz mieć jeszcze osobny obiekt
ArticleRepository odpowiedzalny jedynie za zwracanie danych ze źródła.
2. OOP to jak sama nazwa wskazuje programowanie obiektowe, a klasa jest w nim jedynie złem koniecznym i w miarę możliwości powinieneś unikać wszystkiego co jest z nią bezpośrednio związane. Dotyczy to m.in. właściwości i metod statycznych, z których prawdę mówiąc nie trzeba zbyt często korzystać. Na pewno nie dla czegoś takiego jak Article::factory() co jest jedynie obejściem ułomności PHP (który nie wspiera
[tutaj nazwa czegoś takiego: new Article()->setTitle('abc') ale wypadło mi to z głowy]) w dodatku robi to jeszcze w brzydki sposób bo sugeruje, że metoda ta jest fabryką (google: factory pattern) którą nie jest.
3. Singleton to struktura mająca zapewnić istnienie co najwyżej jednego obiektu danej klasy, a nie obejście problemu komunikowania się różnych obiektów. Swoją drogą przecież połączenie z bazą danych to wręcz książkowy przykład gdzie tworzy się 1, 2, 3 obiekty danej klasy.
4. Swoją drogą to co tutaj robisz to nic innego jak ORM. I na tym etapie swojej zabawy z OOP daruj sobie pisanie własnego - nie masz po prostu możliwości zrobienia tego chociażby w miarę dobrze, a jest to w przypadku aplikacji webowych jeden z filarów aplikacji. Słaby ORM będzie Cie prześladować do końca... W PHP nie masz zbyt dużego wyboru. Osobiście proponuję Doctrine2 - trochę mu nadal brakuje, ale jako jeden z nielicznych obrał dobrą, sprawdzoną już gdzie indziej architekturę.
5. PHP ma co prawda bardzo słabo rozpowszechnione i jeszcze niezbyt dobrze ugruntowane konwencje pisania kodu, ale jakieś tam ma, więc się do nich stosuj. Czyli wywal te "_" sprzed nazw właściwości niepublicznych.
6. Tutaj w każdym przypadku powinieneś dla właściwości wykorzystać modyfikator
private. Pamiętaj o tym, że
protected jednak wchodzi w pewnym stopniu w publiczny interfejs obiektu. Każdy może przecież rozszerzyć Twoją klasę o swoją, która będzie miała dostęp do tych składowych, a raczej nie powinna - od tego są gettery / settery tutaj.