Kimyasal & Malzeme Mühendisliği
Kompozisyon Yönetimi için Özet Fabrika Deseni ile Scalable Engineering Software oluşturmak
Table of Contents
Giriş: Scalable Engineering Software Neden Özet Fabrika Desenine İhtiyacı Var
Mühendislik yazılımı, gereksinimlerini, donanım platformlarını ve bileşenleriyle hızlı bir şekilde ilgili değişikliklerle başa çıkmalı.Yapılmaz element analizi araçları, CAD sistemleri veya gömülü kontrol sistemi, mimarlıkınız, ilgili nesnelerdeki ailelerin yaratılmasını sağlamak için kesintisiz bir şekilde desteklenmelidir.Rekreatif uygulama kodlarını yeniden yazmaksızın, esneklik kazanırsınız, ölçeklenebilirlik kazanırsınız.
Bu makalede, desenin yapısını inceleyeceğiz, bir mühendislik ortamında gerçekçi bir uygulama üzerinden yürüyeceğiz ve bunu uygulamak için ne zaman tartışacağız (ve over-mühendislikten kaçınmak için).Ücretsiz özellikleri geliştirmenize yardımcı olacak olan sistemleri göreceksiniz kodbase.
Özet Fabrika Desenini Anlamak
Core Description
Özet Fabrika Deseni, beton sınıflarını belirtmeden ilgili veya bağımlı nesneler oluşturmak için bir arayüz sağlar. Tek bir fabrikanın birlikte çalışmak için tasarlanmış birçok ürün türü üretmesine yardımcı olur.
- [FONT:0)Abstract (Dönetici)) - her ürün ailesi üyesi için bir yaratım yöntemi ilan eder.
- [[Düzg:0)ConcreteMaster[[Dönetici:0)[değiştir | kaynağı değiştir] - belirli bir varyasyon için beton ürünleri üretmek için yaratım yöntemlerini uygulayın (örneğin, “Hardware Platform A”).
- [[Düzücü:0)AbstractÜrün[[Döntme:0)[[Dönetici:0) - bir tür ürün için bir arayüz (örneğin, Sensör).
- [FONT:0)ConcreteProduct[DÜT:1] - ilgili Beton Katarakt tarafından yaratılan bir ürün tanımlar.
- [FONT:0]Client[[Dönetici:0)[Dönetici:0))[Dönetici[Dönetici:0))
Nasıl çalışır
Müşteri kodu, Özet Üstat (örneğin, yükleme veya koşu zaman seçimi ile) bir örnek alır. Fabrikanın oluşturma yöntemlerini beton fabrikalarının bunları ürettiğini bilmeden çağırır. Beton nesneler aynı aileden gelir çünkü özellikle de mühendislik sisteminizde çok sayıda farklı donanım revizyonları vardır (örneğin, farklı simülasyon fiziği modelleri)
Örneğin, bir mühendislik veri satın alma sistemi, bir “HighSpeed” hem yüksek frekanslı bir sensör hem de bir fast-sampling aktüatör; “LowPowerMasterMasterMaster” düşük frekanslı bir sensör ve düşük güç eylemileyicisi üretir.
Mühendislik Yazılımları için Faydaları
Özet Fabrika Deseni, doğrudan mühendislik sistemlerinin zorluklarına hitap eden birkaç avantaj sunar:
- [FONT=0)Flexability[[Dönetici: 0:1): Uygulamanızın hangi fabrikayı kullandığını değiştirerek tüm bileşenleri Swap. Bu, birden fazla donanım platformunu, simülasyon motorlarını veya UI araçlarını iş mantığına dokunmadan desteklemek için idealdir.
- [FONT:0]Scalability: Yeni bir aile (örneğin, yeni bir sensör markasına destek olmak), sadece yeni bir beton fabrikasını ve ürünlerini uygulamanız.Mevcut kod açık / kapalı Prensiplere atıfta bulunmaksızın yapılandırılır.
- [FONT=0]Maintainability): Object creation logic merkezileştirilir.Bir inşaatçı imza değişikliği olduğunda, sadece şu anda sınıfları olmayan her yer değil.
- [FONT:0)Testability): Birim testlerinde, ubbed bileşen üreten bir makineye sahip olursunuz.Müşteri kodu değişmeden kalır, testleri daha hızlı ve daha güvenilir hale getirir.
- [FONT:0)Portability): Mühendislik yazılımı genellikle farklı işletim sistemleri veya donanım konfigürasyonları üzerinde çalıştırılmalıdır. Abstract Factory, platforma özel UI dialogları, dosya erişim katmanları veya ağ yığınları ortak bir arayüz arkasında oluşturmanızı sağlar.
Uygulamada Deseni Uygulamayı Uygulayın
Step-by-Step Uygulama
Özet Fabrika Desenini mühendislik yazılımınıza uygulamak için, bu adımları takip edin:
- [FONT=0] Ürün ailelerini [Dönetici:0)[[Döneticileri) belirleme; yapısal analiz aracında, siz de var olabilirsiniz.
- [FONT=0)Sine soyut ürün arayüzleri[[Dönetici: 1 ) - Ürün türünde bir arayüz oluşturun. Örneğin: [[Üyetim: [[Üyetim:Şerefli:Şerefli Ürün arayüzü.
- [FONT=0) soyut fabrika arayüzünü ([Dönetici: 1 ürün oluşturmak için yöntemler: [[Üyetim: 03.Bölüm: 9), [[Üye Olmayanlar İçin Tıklayınız.
- [FONTNT:0]Implement beton fabrikaları[Döntgen: 1 ) - Her aile için (örneğin, 08.03.2012) ve [[FONTFLT:11) için uygun beton ürün sınıflarına geri dönen bu yöntemlerin somut uygulamaları sağlar.
- [FONT:0]Müşteriyi yapılandırın[[Dönetici: 1). – Müşteri soyut fabrikanın bir örneğini alır (ya bağımlılık enjeksiyonu, yapılandırma dosyası veya basit bir runtime kararı). Daha sonra ihtiyacı olan bileşenleri oluşturmak için fabrikayı kullanır.
Örnek: FEA Solver Aile
Çok yönlü bir element analizi platformu inşa ettiğinizi düşünün. Farklı analiz türleri farklı çözücüler ve preişleme araçları gerektirir. Abstract Factory kullanarak, bu (pseudo-code in a language-agnostic style):
// Abstract products
interface ISolver {
void Solve();
}
interface IMeshGenerator {
Mesh Generate();
}
// Abstract factory
interface ISolverFactory {
IMeshGenerator CreateMeshGenerator();
ISolver CreateSolver();
}
// Concrete factory for linear static analysis
class LinearStaticFactory : ISolverFactory {
IMeshGenerator CreateMeshGenerator() => new LinearStaticMeshGen();
ISolver CreateSolver() => new DirectSolver();
}
// Concrete factory for nonlinear dynamic analysis
class NonlinearDynamicFactory : ISolverFactory {
IMeshGenerator CreateMeshGenerator() => new NonlinearMeshGen();
ISolver CreateSolver() => new IterativeSolver();
}
// Client code
class AnalysisEngine {
private ISolverFactory factory;
public AnalysisEngine(ISolverFactory factory) {
this.factory = factory;
}
public void Run() {
var mesh = factory.CreateMeshGenerator().Generate();
var solver = factory.CreateSolver();
solver.Solve();
}
}
Şimdi, analiz türlerini değiştirmek için, sadece motoru farklı bir fabrika ile oluşturmak zorundasınız - başka bir kod değişikliği yoktur. Bu model farklı fizik modüllerini desteklemek için birçok ticari FEA paketlerinde kullanılır.
Gerçek Dünya Scenario: Gömülü Sistemler için Donanım Özeti
Bir mühendislik ekibi bağımsız bir drone için bilgisayar geliştirme cihazını düşünün. drone'un uçuş kontrol cihazı birden fazla sensör paketi (GPS, IMU, barometre) ve eylemci tipi (ESC, servo) kullanır.Her donanım revizyonu farklı iletişim protokolleri kullanır (I2C, SPI, UART).
Özet fabrika, gerçek donanımla konuşan beton ürünleri tanımlar. Uçuş kontrol cihazı gibi beton fabrikaları değiştirmek için yeni bir sensör revizyonu gelir.Ağuk kontrol algoritmaları değiştirmeden yeni bir fabrika eklenir.Bu, test ve entegrasyon çabasını dramatik bir şekilde azaltır.
Bu tür soyutlar da ünite testleri için değerlidir - fiziksel donanım olmadan sürekli entegrasyon sağlamak için simdi bir sensör okuması geri dönen bir fabrika enjekte edebilirsiniz.
İlgili Desenlerle Karşılaştırma
Özet Fabrika vs. Fabrika Yöntemi
[FONT=0)Yüksek Lisans Yöntemi[[Dönetici:0)[[Dönetici:0))[[tr|Dönetici:0))) Karşılaştırmalı bir ürün için tek bir yöntem kullanır ve sadece bir ürüne ihtiyacınız olduğunda, Abstract Factory tek bir ürün için çalışır.
Özet Fabrika vs. Builder
[FONT=0]Builder[Dönetici:0)[Dönerge:0)Yapıcı[Dönetici:0)[Döner[Dönetici:0)Yapıcı[Dönergesel)[Dönergeler, bir CAD modelinin montajı sırasında karmaşık bir nesne adım inşa etmeye odaklanırlar - bir Builder o zaman bir araya getirdiği bireysel parçalar oluşturabilir. Builders birden fazla adım gerektirir (örneğin, CAD modelinin birleştirilmesi gerekir. Abstract Factory ürün doğrudan ürün döndürür.
Özet Fabrika vs. Bağımlılığı (DI)
DI konteynerleri (örneğin, Spring, .NET Core DI) genellikle kontraksiyon altında Özet Fabrika kalıbını kullanabilirsiniz. Beton fabrikalarınızı konteynerde kayıt olabilirsiniz ve konteynerin onları çözmesine izin verebilirsiniz.
En İyi Uygulamalar ve Pitfalls
Özet Fabrika Kullanınca
- Sisteminiz, ürünlerinin nasıl yaratıldığı, oluştuğu veya temsil edildiğinden bağımsız olmalıdır.
- Birlikte kullanılacak olan birçok ürün ailesini tahmin edersiniz.
- Ürün çeşitleri arasında tutarlılığı uygulamak istiyorsunuz.
Ortak Pitfalls
- [FONT:0)Over-abstraction): Her küçük varyasyon için fabrikalar eklemek gereksiz karmaşıklığa yol açar. Evaluate eğer gerçekten birlikte değişen birden çok ürün ailesi varsa.
- [[DüzD:0)Too birçok ürün türü[[Dönemli fabrika arayüzü büyük büyürse (örneğin, 10+ yöntem), daha küçük fabrikalara bölmeyi veya bir kayıt yaklaşımı kullanmayı düşünün.
- [FONT:0)Performance ([Dönetici:0)Performance (Dönetici)[Dönetici)): Performans-kritik gömülü sistemlerde ekstralar sorunlu olabilir. Bu tür durumlarda, der-zaman polimorphism (templates/generics) dil izinleri veya dikkatlice profiller kullanın.
Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç
Özet Fabrika Deseni, birçok bileşenli aileyi desteklemeli, ölçeklenebilir, kullanılabilir bir mühendislik yazılımı oluşturmak için kanıtlanmış bir yoldur.Incapsulating object creation, you free your core algorithms from platform-specific details, enable easy extension, testing, and adaptasyon. if you are design a multi-fiziksel simülasyon çözme, a Donanım Soykağı, for drone, or a modüler CAD application, Abstract Factory provides a net bir yapı for managing families of objects.
Daha fazla çalışma için, orijinal )Wikipedia Giriş[Dönetici:2)Refaktoring Guru rehberi) veya derin bir dalışa atıfta bulunun.[Döneticileri için geçerli olan)[Dönemli olarak, ve mühendislik yazılımınız yarınki zorluklarına hazır olacaktır.