Mimari¶
Proje, Python 3.8’de herhangi bir web servis kütüphanesi kullanılmadan Celery üzerinde belirli aralıklarla çalışan tasklar üzerinden asenkron olarak çalışacak şekilde tasarlanmıştır.
Celery broker olarak Redis’i kullanıyor, veritabanı bulunmuyor ve bunun dışında minimal durum bilgisi barındırdığı için (stateless) yatay ölçeklenme konusunda esnek bir altyapı sunuyor. Şu ana kadar olan geliştirmelerde Redis üzerinde de broker’ın kendi kullanımı dışında cache amaçlı olarak herhangi bir veri tutulmadı. Durum bilgisi olarak sayılacabilecek ortam değişkenleri, ACC üzerinde uygulama kurulduğu zaman besleniyor ve bazı nadir durumlarda güncelleme alıyor. Bu senaryoda uygulama yeniden başlatılarak, uygulamanın güncellemeleri alması gerekiyor.
Mimari, genel olarak 3 temel bloktan oluşuyor: Omnitron Entegrasyonu, Satış Kanalı Entegrasyonu ve de tasklar.
Entegrasyon¶
Entegrasyon kısımları ortak bir ebeveyn sınıf üzerinden Komut (Command) tasarım örüntüsünü kullanarak tanımlandı. Gerekli olan akışlar için OmnitronIntegration ve ChannelIntegration sınıflarında varsayılan komutlar geliştirildi.
Komutlar task metotlarının tanımlandığı noktada birbiri ardına çağrılmaktadır. Birinin çıktısı, sonrakinin girdisi olduğu için uygun formatta çıktı üretip girdi almaktadırlar. Bu sebeple tanımlanan arayüzlere sadık kalınması şiddetle tavsiye edilmektedir.
- class BaseIntegration[kaynak]¶
To integrate with any system you must create a class which inherits from BaseIntegration. This class was designed to work with command design pattern which basically defines a task procedure interface. All defined commands override some of the default base methods according to their requirements.
- do_action(key: str, **kwargs) Any [kaynak]¶
Runs the command given with the key and supplies the additional parameters to the command.
- Parametreler
key – Command key
kwargs – Any additional parameters can be specified, for example objects must be supplied if you want to provide input to the action.
- Dönüşler
Result of the command
- do_action_async_run(key: str, **kwargs) Any [kaynak]¶
Runs the command given with the key asynchronously and supplies the additional parameters to the command.
- Parametreler
key – Command key
kwargs – Any additional parameters can be specified, for example objects must be supplied if you want to provide input to the action.
- Dönüşler
Result of the command
- property catalog: omnisdk.omnitron.models.Catalog¶
Retrieves the catalog object using the catalog_id stored in the self.
Side effect: It stores the result in the self.catalog_object, if catalog is updated on the currently running task you must delete self.catalog_object and re-call this method
- property channel: omnisdk.omnitron.models.Channel¶
Retrieves the channel object using the channel_id stored in the self.
Side effect: It stores the result in the self.channel_object, if channel is updated on the currently running task you must delete self.channel_object and re-call this method
Omnitron Entegrasyonu¶
Omnitron entegrasyonu, Channel App Template’ın, Omnitron servislerini çağırıp, CRUD işlemlerini, farklı servislerden veri toplamayı ve verilerin uygun formata dönüşümünü yaptığı sınıftır.
Burada farklı amaçlar için tanımlanmış komutlar bulunmaktadır. Örneğin; ürün oluşturma, ürün silme ve stok güncelleme bunlardan birkaçı. Komutların tamamının listesi için referans dokümanını inceleyebilirsiniz.
OmnitronIntegration sınıfı altındaki tüm komutlar, standart bir arayüz sunması ve de temel olarak kullanıldığı her projede tekrar tekrar yazılmasının önüne geçmek adına, girdi ve çıktı olarak DTO(Data Transfer Object) sınıflarını kullanmaktadırlar. Böylece farklı pazaralanları için geliştirilen projelerde aynı veri formatına dönüştürüldüğü sürece komutlar çalışmaya devam edecektir.
İdeal bir senaryoda OmnitronIntegration sınıfını türetmeye gerek olmayacak ve sınıf doğrudan kullanılabilecektir. Omnitron ve Channel App Template arasındaki iletişimde de değişen noktalar olabileceği gibi, modeller ve yapı çoğunlukla sabit kalacağından, A ve B pazaralanları için farklı geliştirme yapılması ihtimali düşüktür.
Satış Kanalı Entegrasyonu¶
Satış kanalı entegrasyonu, Channel App Template’ın, satış yapmak istediği pazaralanının servislerini çağırıp, CRUD işlemlerini, farklı servislerden veri toplamayı ve verilerin uygun formata dönüşümünü yaptığı sınıftır.
Satış kanalı servisleri ile bağlantı kurmak için istemci sınıfı yazılacaksa ya da requests kütüphanesi üzerinden herhangi bir sarmalayıcı bir yapı kullanmadan istekler atılacaksa, gerekli nesnelerin ve ayar değişkenlerinin bu sınıfın __init__ metodunda tanımlanması önerilir.
ChannelIntegration sınıfındaki komutlar __mocked_request adında mock veri ile çalışan varsayılan bir metot barındırıyor. Bunlar taslak olarak kullanılan metotların baştan sona çalışması için hazırlandı. Her pazaralanı için farklı bağlantı ve servisler bulunacağından dolayı ortak bir çözüm uygulanması teknik olarak mümkün değil. Channel App geliştiricileri buradaki komutları türetmeli ve send metodunu ezerek komutu tamamlamalı. Yeni send metodunda pazaralanı servislerine istek atıp verileri de Omnitron komutlarının beklediği DTO nesnelerine dönüştürmeli.
Komut Arayüzü¶
Komut arayüzü, yapılacak işlemler için standart metotlar belirleyen bir tasarım örüntüsüdür. Çalıştır, gönder, getir gibi varsayılan metotların farklı komutlarda ihtiyaca göre değişen kısımlarının ezilmesiyle minimal değişikliklerle farklı komutlar geliştirilir. Böylece hata yönetimi, genel akış, ekstra modüllerin statü yönetimleri gibi diğer gereksinimler her bir komut için tekrar tanımlanmaz.
- class CommandInterface[kaynak]¶
-
- transform_data(data) object [kaynak]¶
This method can be used to format the input data before it is executed on the run method.
Tasklar¶
Tasklar, farklı komutların birbiri ardına çalıştırılmasıyla bir iş akışını tamamlayan düzenli aralıklarla çalışan metotları ifade eder. Uygulamanın giriş noktalarıdır. Komutlar kendi başlarına çağrılmaz. Bir task içerisinde sadece o komutun çalışacağı şekilde tanımlanabilir. Tasklar, Celery üzerindeki tanımlı programa göre düzenli olarak çalıştırılır ya da manuel olarak Flower üzerinden tetiklenebilir. Tasklar akışları oluşturan birimlerdir. Bu konu hakkında daha detaylı bilgi için Akışlar bölümünü inceleyebilirsiniz.
Servisler(Flowlar)¶
Servisler, tasklar aracılığıyla Akinon ile Satış Kanalı Entegrasyonu arasındaki iletişimi sağlayan kısımdır. Akinondan verinin okunması/yazılması ve Satış Kanalı ile iletişime geçilmesi olmak üzere 2 temel adımdan oluşur.
Module |
Açıklama |
---|---|
Kurulum aşamasına ait komutlar |
|
Ürün ile ilgili komutlar |
|
Fiyat ile ilgili komutlar |
|
Stok ile ilgili komutlar |
|
Resim ile ilgili komutlar |
|
Sipariş ile ilgili komutlar |