2008-09-02 15 views
3

C++'da, standart dışı bir günlük oluşturma aracı yoktur. Benim tecrübemde dükkanlar kendi başlarına dönüyor. Bununla birlikte, yeniden kullanılabilir yazılım bileşenleri oluşturmaya çalışırken bu biraz sorun yaratır. Sisteminizdeki her şey, günlüğe kaydetme bileşenine bağlıysa, bu, yazılımın yeniden kullanılabilir olmasını sağlar ve temelde herhangi bir alt projeyi gerçekten istedikleri bileşenlerle birlikte günlüğe kaydetme çerçevenize çekmeye zorlar.C++ kayıt altyapıları yeniden kullanılabilirliği feda eder mi?

IOC (bağımlılık enjeksiyonu) gerçekten sorunlara yardımcı olmaz çünkü bileşenleriniz günlüğe kaydetme işlemine bağlı olmalıdır. Günlük bileşenlerinin kendileri, dosya G/Ç'lerine, tetikleme mekanizmalarına ve diğer olası istenmeyen bağımlılıklara bağımlılıklar ekleyebilir.

Özel günlüğe kaydetme çerçevenize bağımlılık eklemek, bileşenin yeniden kullanılabilirliğini feda eder mi?

cevap

5

Evet. Ancak bağımlılık enjeksiyonu bu durumda yardımcı olacaktır.

Soyut bir günlük taban sınıfı oluşturabilir ve kullanmak istediğiniz günlük oluşturma çerçeveleri için uygulamalar oluşturabilirsiniz. Bileşenleriniz sadece soyut temel sınıfa bağlı. Ve uygulamaları, ihtiyaç duydukları şekilde bağımlılıkları ile birlikte enjekte edersiniz.

+0

+1, Bu tam durumdayım, projemin ana uygulamasında, istediğim ek bilgileri kaydeden soyut bir günlük çerçevesi var ... Ama aynı zamanda (farklı) bir kayıt çerçevesine sahip kütüphaneleri kullanıyor ama neyse ki Aynı zamanda, çerçevenin içine geçecek bir nesneyi de içine almasını beklerler ... Bu yüzden bir nesneyi biriktiririm, mevcut günlük çerçevem ​​açısından uygularım ve giderim! – Arafangion

1

Evet, Mendelt haklı. Ürünlerimizde tam olarak bunu yapıyoruz. Her şey ILogger soyut arayüzüne bağlıdır, ancak başka hiçbir şeye bağlı değildir. Tipik olarak bir yürütülebilir veya yüksek düzeyli bir DLL, gerçekte uygulanan bir Logger arabirimi oluşturmak ve enjekte etmek olacaktır.

0

Yeniden derlenmeyecek kitaplıklar oluşturmak istiyorsanız, ancak bir günlüğe kaydetme arabirimi sağlamak istiyorsanız, belki de iyi bir yol, kullanıcının (kitaplığın) bir geri arama sağlayabilmesidir.

Kitaplığınız ile günlüğe kaydetmeyi başlatırken, geri aramayı belirtmeleri gerekir ve daha sonra tutkal kodu, sahip oldukları her şeyle iyi oynayabilmeleri için onlara bağlıdır.

Geri arama imzasının her zaman kullanabileceği standart bir işlev gibi görünmesini sağlayabilirsiniz, aslında bir günlük kaydı yoksa, kolay bir varsayılan seçenek sağlar. Ayrıca, arayanın kitaplıktan çok kez bileşenlere sahip olabileceği ve kaynak çekişme veya iş parçacığı sorunları için her biri için farklı bir günlüğe kaydetme çağrısı sağlaması istenebilir.

İlgili konular