Yönetilen Ad Alanları

Özet

Giriş

Weave SDK'da yönetilen ad alanları, hem Weave SDK geliştiricileri hem de entegratörlere, SDK'daki belirli API gruplarının tanımlanmasıyla ilgili reklamı yapılan yönergeler ve alt metinler sağlamak için kullanılır. Böylece, Weave SDK sürümlerinde taşıma yollarını planlayıp tahmin edebilir ve potansiyel olarak belirli bir modül için birden fazla eş zamanlı Weave API'sini yönetebilirler.

Tanımlama

Yönetilen ad alanları, dört tanımlamadan biri olarak yönetilebilir:

Geliştirme

Geliştirme tanımlamasıyla yönetilen herhangi bir ad alanı, geliştiricilere ve entegratörlere, içerdikleri API'lerin aktif geliştirme aşamasında olduğunu, değişebileceğini ve resmi olarak desteklenmediğini belirtir. Entegratörlerin, özel olarak yönlendirilmedikleri sürece bu API'leri kullanmaları genellikle önerilmez.

Sonraki

Next tanımlamasıyla yönetilen herhangi bir ad alanı, geliştiricilere ve entegratörlere, içerdikleri API'lerin büyük ölçüde etkin geliştirmeleri olsa da hâlâ değişebileceğine ve erken değerlendirme amaçları doğrultusunda desteklenebileceğini gösterir. Bu şekilde belirlenen API'ler, bir Weave SDK API'de bir sonraki evrim önünü temsil eder ve yakın ile yakın gelecekte büyük bir yayın döngüsünde mevcut, varsayılan API'ler olacaktır.

Hem API'den hem de kablolu protokol açısından geriye dönük uyumluluk mevcut olabilir ancak bu şekilde belirtilen API'lerde garanti edilmez.

Sonraki yönetilen ad alanı tanımlaması, neyin gelecekteki bir sürümde varsayılan API olarak kullanılacağına dair ipuçları vererek geliştiricilere ve entegrasyon uzmanlarına Weave SDK'nın nereye yönlendireceğini etkili bir şekilde gösterir.

Sonraki yönetilen ad alanı tanımlaması, yönetilen bir ad alanının kullanılmadan bir yaşam döngüsü boyunca geçiş yapabileceği için isteğe bağlıdır (Yönetilen Ad Alanı Yaşam Döngüsü bölümüne bakın).

Şu anki adı

Geçerli tanımlamayla yönetilen herhangi bir ad alanı veya yönetilmeyen herhangi bir ad alanı (ör. yönetilen ad alanı ataması eksik) Weave SDK'nın söz konusu bölümü veya modülü için mevcut, varsayılan, resmi olarak desteklenen API'yi temsil eder. Bu tür API'lerde halen iyileştirmeler yapılabilir. Ancak değişiklikler büyük ölçüde artımlı ve geriye dönük uyumluluk sağlayacak olsa da hem API hem de kablosuz bağlantı sürdürülmelidir.

Mevcut yönetilen ad alanı tanımlaması, yönetilen bir ad alanının kullanılmadan bir yaşam döngüsü boyunca geçiş yapabileceği için isteğe bağlıdır (Yönetilen Ad Alanı Yaşam Döngüsü bölümüne bakın). Aslında yönetilmeyen tüm ad alanları dolaylı olarak Güncel'dir.

Eski

Eski tanımlamayla yönetilen herhangi bir ad alanı, geliştiricilere ve entegratörlere, içerdikleri API'lerin kullanımdan kaldırıldığını ve bunların yerini yeni ve güncel bir API'nin aldığını gösterir. Bu API'ler eskiden şu anki API'yi temsil eder.

Bu şekilde belirlenen API'ler, bir sonraki büyük Weave SDK sürümünde tamamen kullanımdan kaldırılacak; Sonuç olarak, geliştiriciler ve entegrasyon uzmanları Weave SDK sürümlerinin son ucunda kalmayı planlıyorsa bu API'lerden taşınmaya yönelik planlar oluşturmalıdır.

Yönetilen Ad Alanı Yaşam Döngüsü

Aşağıdaki şekilde, yönetilen ad alanının Geliştirme durumundan Eski'ye geçiş sürecindeki yaşam döngüsü gösterilmektedir:

.-------------.      .- - - .      .- - - - -.      .--------.
| Development | -.->   Next   -.->   Current   ---> | Legacy |
'-------------'  |   '- - - '  |   ' - - - - '      '--------'
                 |             |
                 '-------------'

Bu parametre kullanılırsa yönetilen ad alanı yaşam döngüsü, Geliştirme tanımlamasıyla başlar.

Geliştirme tamamlandığında ve kod, değerlendirme ve entegrasyon için hazır olduğunda tanımlama, Sonraki veya Geçerli'ye taşınır. Alternatif olarak, tanımlama tamamen kaldırılabilir ve yönetilen ad alanı artık kullanılmayabilir. Bu durum, atamanın dolaylı olarak Geçerli olmasını sağlar.

Kod birlikte yayınlanacaksa ve henüz mevcut kodu desteklemeyecekse tanımlama "Sonraki"ye taşınmalıdır. Kod, mevcut kodu geçersiz kılacaksa tanımlama Geçerli'ye taşınmalıdır.

Sonraki tanımlamayı kullanıldığında, kod istenen sayıda yayın ve değerlendirme döngüsünden geçtikten sonra tanımlama Geçerliliğe taşınır veya yine de Tanımlama tamamen kaldırılabilir.

Mevcut tanımlamayı kullandığınızda, kod yeni kodla değiştirilecek ancak bir dizi sürüm döngüsü boyunca korunması gerekiyorsa bu kod Eski'ye taşınır.

Eski tanımlamadan sonra kod, sonunda Weave SDK'sından tamamen kaldırılır.

Yönetilen Ad Alanlarını Kullanma

Weave SDK kullanıcıları, yönetilen ad alanlarıyla geliştirici olarak, mevcut kodu genişletip koruyarak veya Weave'i kendi uygulama, platformu ve sistem kodlarına entegre ederek entegratör olarak etkileşim kurabilir. Aşağıdaki iki bölümde, Weave tarafından yönetilen ad alanlarını bu iki açıdan ele almayla ilgili öneriler ayrıntılı olarak açıklanmaktadır.

Yönetilen Ad Alanlarını Geliştirici Olarak Kullanma

Weave SDK geliştiricisinin temel odak noktalarından biri, yeni Weave SDK API'lerini ve işlevlerini geliştirip geliştirmek, diğer yandan çoğu durumda mevcut API ve işlev dağıtımlarını desteklemektir.

Her iki odak alanının da aynı API içinde geriye dönük olarak uyumlu şekilde karşılanamaması durumunda, yönetilen ad alanları, bu API'leri mevcut API ve işlev dağıtımlarını kesintiye uğratmayacak şekilde paralel olarak yönetmeyi sağlayan bir mekanizma sağlar.

Çalışan bir örnek olarak şu anda aşağıdaki yönetilmeyen ad alanı hiyerarşisinde bulunan Mercury adlı Weave profilini düşünün:

namespace nl {
namespace Weave {
namespace Profiles {
namespace Mercury {

// ...

}; // namespace Mercury
}; // namespace Profiles
}; // namespace Weave
}; // namespace nl

ve aşağıdaki herkese açık başlıklar:

  • Weave/Profiles/Mercury/Mercury.hpp
  • Weave/Profiles/Mercury/Bar.hpp
  • Weave/Profiles/Mercury/Foo.hpp
  • Weave/Profiles/Mercury/Foobar.hpp

Mercury.hpp, "şemsiye" modülüdür. kullanabilirsiniz. Çoğu entegrasyon uzmanı "şemsiye" modülünü içerir başlık ekleyin:

#include 

Ancak Mercury'nin gelişimi artık yeni nesil API'lerin ve muhtemelen mevcut dağıtımlarla geriye dönük uyumlu olmayan kablolu protokol geliştirilmesinin gerekli olduğu bir noktaya ulaştı. Yönetilen ad alanlarını kullanarak mevcut dağıtımları bozmadan bu işlemleri gerçekleştirebilirsiniz.

Mevcut Ad Alanını Geçerli Olana Taşı

API'nin mevcut sürümünü ve dağıtılan mevcut entegrasyonların işlevlerini desteklemeye devam etmek için atmanız gereken ilk görev, mevcut kodu taşımaktır:

% cd src/lib/profiles/mercury
% mkdir Current
% mv Mercury.hpp Bar.hpp Foo.hpp Foobar.hpp *.cpp Current/

Dosyaları taşımaya ek olarak, başlığın taşınan dosyalar için korumalar da içerdiğini unutmayın. Bunlar, aşağıdaki gibi yeni ve benzer adlandırılmış dosyalar oluşturulacağından dosyaların '_CURRENT' ile süslenmesi gerekir.

Kod taşındıktan sonraki adım, ad alanını uygun tanımlamayla (buradaki "Geçerli") yönetmektir. Öncelikle, yönetilen ad alanını "Current/MercuryManagedNamespace.hpp" olarak tanımlayan bir başlık oluşturun. Böyle bir başlık oluşturmak, birden fazla başlık dosyası olduğunda bu içeriğin her bir başlık dosyasında tekrarlanması ve çoğaltılması tercih edilir.

% cat << EOF > Current/MercuryManagedNamespace.hpp
#ifndef _WEAVE_MERCURY_MANAGEDNAMESPACE_CURRENT_HPP
#define _WEAVE_MERCURY_MANAGEDNAMESPACE_CURRENT_HPP

#include <Weave/Support/ManagedNamespace.hpp>

#if defined(WEAVE_CONFIG_MERCURY_NAMESPACE) && WEAVE_CONFIG_MERCURY_NAMESPACE != kWeaveManagedNamespace_Current
#error Compiling Weave Mercury current-designation managed namespace file with WEAVE_CONFIG_MERCURY_NAMESPACE defined != kWeaveManagedNamespace_Current
#endif

#ifndef WEAVE_CONFIG_MERCURY_NAMESPACE
#define WEAVE_CONFIG_MERCURY_NAMESPACE kWeaveManagedNamespace_Current
#endif

namespace nl {
namespace Weave {
namespace Profiles {

namespace WeaveMakeManagedNamespaceIdentifier(Mercury, kWeaveManagedNamespaceDesignation_Current) { };

namespace Mercury = WeaveMakeManagedNamespaceIdentifier(Mercury, kWeaveManagedNamespaceDesignation_Current);

}; // namespace Profiles
}; // namespace Weave
}; // namespace nl

#endif // _WEAVE_MERCURY_MANAGEDNAMESPACE_CURRENT_HPP
EOF

Ardından, bu üstbilgiyi, modüle özgü diğer "include" (ekleme) yönergelerinden önce mevcut başlıklara ekleyin. Örneğin:

#include 

#include 

Uyumluluk Üst Bilgileri Oluşturma

Ancak mevcut başlıkları yeni bir konuma taşımak ve bunların tek başına ad alanını yönetmek, tüm dağıtımların az önce yukarıya taşınan başlıkları belirten yönergeler kullandıkları için bu dağıtımların değişmeden çalışmasını sağlamak için yeterli değildir.

Bu sorunu gidermek için, az önce taşınanlarla eşleşen adlara sahip uyumluluk sarmalayıcı başlıkları oluşturulmalıdır.

% touch Mercury.hpp Bar.hpp Foo.hpp Foobar.hpp

Yalnızca Geçerli olarak atanmış bir yönetilen ad alanı, ona eşlik edecek bir Geliştirme veya Next tarafından atanmış yönetilen ad alanı oluşturulmadan oluşturuluyorsa bu dosyaların içeriği, aynı ada sahip yeni taşınan üst bilgiyi belirten bir "Guard" ve "include" yönergesi içeren bir başlıktan oluşabilir:

#ifndef _WEAVE_MERCURY_BAR_HPP
#define _WEAVE_MERCURY_BAR_HPP

#include 

#endif // _WEAVE_MERCURY_BAR_HPP

Bununla birlikte, yeni ve uyumsuz geliştirmeyi desteklemek için Geliştirme veya Sonraki tarafından atanmış bir yönetilen ad alanı da oluşturuluyorsa biraz daha karmaşık bir işlem yapılması gerekir.

Daha önce olduğu gibi, burada MercuryManagedNamespace.hpp olarak yönetilen ad alanı yapılandırması için bir başlık oluşturulur. Yine bu yöntem, birden fazla başlık dosyası olduğunda bu içeriğin her bir başlık dosyasında tekrarlanması ve çoğaltılması tercih edilir.

% cat << EOF > MercuryManagedNamespace.hpp
#ifndef _WEAVE_MERCURY_MANAGEDNAMESPACE_HPP
#define _WEAVE_MERCURY_MANAGEDNAMESPACE_HPP

#include <Weave/Support/ManagedNamespace.hpp>

#if defined(WEAVE_CONFIG_MERCURY_NAMESPACE)                             \
  && (WEAVE_CONFIG_MERCURY_NAMESPACE != kWeaveManagedNamespace_Current) \
  && (WEAVE_CONFIG_MERCURY_NAMESPACE != kWeaveManagedNamespace_Development)
#error "WEAVE_CONFIG_MERCURY_NAMESPACE defined, but not as namespace kWeaveManagedNamespace_Current or kWeaveManagedNamespace_Development"
#endif

#if !defined(WEAVE_CONFIG_MERCURY_NAMESPACE)
#define WEAVE_CONFIG_MERCURY_NAMESPACE kWeaveManagedNamespace_Current
#endif

#endif // _WEAVE_MERCURY_MANAGEDNAMESPACE_HPP
EOF

Bu işlemin istenen şekilde, yönetilen ad alanı atamasını varsayılan olarak "Current" olarak ayarladığını unutmayın herhangi bir yapılandırma tanımlanmamışsa.

Bu başlık yerleştirildiğinde, uyumluluk sarmalayıcı başlıkları artık şunları içerecek şekilde düzenlenebilir:

#include 

#if WEAVE_CONFIG_MERCURY_NAMESPACE == kWeaveManagedNamespace_Development
#include 
#else
#include 
#endif // WEAVE_CONFIG_MERCURY_NAMESPACE == kWeaveManagedNamespace_Development

kullanım alanına uygun bir şekilde düzenleyebiliriz.

Geliştirme İçeriği Oluşturma

Bu noktada, mevcut işlevselliklerin ve API'lerin yanı sıra yeni işlevler ve API'ler oluşturmaya başlamak için altyapı artık hazır.

% mkdir Development
% touch Development/Mercury.hpp Development/Bar.hpp Development/Foo.hpp Development/Foobar.hpp
% cat << EOF > Development/MercuryManagedNamespace.hpp
#ifndef _WEAVE_MERCURY_MANAGEDNAMESPACE_DEVELOPMENT_HPP
#define _WEAVE_MERCURY_MANAGEDNAMESPACE_DEVELOPMENT_HPP

#include <Weave/Support/ManagedNamespace.hpp>

#if defined(WEAVE_CONFIG_MERCURY_NAMESPACE) && WEAVE_CONFIG_MERCURY_NAMESPACE != kWeaveManagedNamespace_Development
#error Compiling Weave Mercury development-designated managed namespace file with WEAVE_CONFIG_MERCURY_NAMESPACE defined != kWeaveManagedNamespace_Development
#endif

#ifndef WEAVE_CONFIG_MERCURY_NAMESPACE
#define WEAVE_CONFIG_MERCURY_NAMESPACE kWeaveManagedNamespace_Development
#endif

namespace nl {
namespace Weave {
namespace Profiles {

namespace WeaveMakeManagedNamespaceIdentifier(Mercury, kWeaveManagedNamespaceDesignation_Development) { };

namespace Mercury = WeaveMakeManagedNamespaceIdentifier(Mercury, kWeaveManagedNamespaceDesignation_Development);

}; // namespace Profiles
}; // namespace Weave
}; // namespace nl

#endif // _WEAVE_MERCURY_MANAGEDNAMESPACE_DEVELOPMENT_HPP
EOF

Elbette bir modül burada verilen örnekten çok daha basitse ve çok sayıda sınıf, kaynak, dosya ya da başlık içermiyorsa, tüm bu işlemler, dosyalar taşınmadan ve birden çok bağımsız yapılandırma ve uyumluluk başlığı oluşturulmadan aynı başlık dosyasında gerçekleştirilebilir. Ancak bu karmaşık örnek, karmaşıktan basite doğru yelpazedeki yönetilen ad alanı çözümlerine ilham vermelidir.

Yönetilen Ad Alanlarını Entegratör Olarak Kullanma

Weave SDK entegratörünün en önemli odak noktalarından biri, uygun Weave SDK herkese açık API başlıklarını dahil etmek ve bunlarla uygulama entegre edip geliştirmektir.

Başarılı bir örnek olarak yine Mercury'nin Sonraki, Geçerli ve Eski şeklinde tanımlanmış yönetilen ad alanlarına sahip olduğunu ve herkese açık başlıkları aşağıdaki gibi yapılandırılmış bir Weave profilinin olduğunu varsayalım:

  • Weave/Profiles/Mercury/Mercury.hpp
  • Weave/Profiles/Mercury/Bar.hpp
  • Weave/Profiles/Mercury/Foo.hpp
  • Weave/Profiles/Mercury/Foobar.hpp
  • Weave/Profiles/Mercury/Next/Mercury.hpp
  • Weave/Profiles/Mercury/Next/Bar.hpp
  • Weave/Profiles/Mercury/Next/Foo.hpp
  • Weave/Profiles/Mercury/Next/Foobar.hpp
  • Weave/Profiles/Mercury/Current/Mercury.hpp
  • Weave/Profiles/Mercury/Current/Bar.hpp
  • Weave/Profiles/Mercury/Current/Foo.hpp
  • Weave/Profiles/Mercury/Current/Foobar.hpp
  • Weave/Profiles/Mercury/Legacy/Mercury.hpp
  • Weave/Profiles/Mercury/Legacy/Bar.hpp
  • Weave/Profiles/Mercury/Legacy/Foo.hpp
  • Weave/Profiles/Mercury/Legacy/Foobar.hpp

Mercury.hpp, "şemsiye" modülüdür. kullanabilirsiniz.

Mevcut kullanım alanı, Weave'de açık bir şekilde ad alanı tarafından yönetilen bir modül dahil edilmesini gerektirmiyorsa, örneğin:

#include 

Weave modülü herkese açık başlıklarına, yönetilmeyen, varsayılan yollarıyla (ör. Weave/Profiles/Mercury/Mercury.hpp) başvuruda bulunmanız önerilir. Böylece, API'ler yönetilen yaşam döngüsünde ilerlerken bir projenin dahil etme yönergelerinde sürekli değişiklik yapmadan, API geliştirme sürecinin ilerlemesini takip edebilirsiniz.

Bu stratejinin ardından dağıtımlar, C/C++ ön işlemcisinde istenen yapılandırmayı belirterek kodlarını farklı bir yönetilen ad alanı tanımlamasında (ör. Mevcut tanımlama) yeniden hedefleyebilir. Bu işlem komut satırında, kaynak kodunda veya bir yapılandırma ya da önek başlığında yapılabilir:

#define WEAVE_CONFIG_MERCURY_NAMESPACE kWeaveManagedNamespace_Current

ve yönetilmeyen / nitelikli olmayan dahil etme yolunu kullanın:

#include 

Hedeflenen API'lerin yönetilen ad alanı tanımlaması değişirse (ör. Geçerli olandan Eski'ye) söz konusu olduğunda, ön işlemci tanımını düzenleyerek yeniden hedeflemeniz yeterlidir:

#define WEAVE_CONFIG_MERCURY_NAMESPACE kWeaveManagedNamespace_Legacy