Kimikal na Pampaya; Inhinyeriya ng Materyales
Paglikha ng Mahuhusay na Inhinyeriya na Software na May Eksistensiyal na Disenyo sa Pabrika Para sa Komponenteng Pangangasiwa
Table of Contents
Introduksiyon: Kung Bakit Kailangan ng Mahuhusay na Inhinyeriya ang Di - nagbabagong Disenyo sa Pabrika
Ang mga software sa inhinyeriya ay dapat humawak ng mabilis na pagbabago sa mga kahilingan, hardware platform, at mga pamilyang bumubuo ng mga elementong may limitasyon, CAD system, o mga naka-ink control firmware, ang inyong arkitektura ay dapat sumuporta sa walang - tigil na pagsasama ng bagong sensor, mga influctor, mga final final pattern, isang paraan upang makabuo ng isang napatunayang pangunahing lohika Ang pag - aayos ng mga bagay na may kaugnayan sa paggawa ng mga bagay na may kaugnayan sa inhinyeriya ay maaaring makuha, ang lahat ng mga produktong pang - ang mga kagamitan, at ang mga produktong pang - imporma, at ang mga produktong pang - impormasyon. — Para sa pamamagitan ng mga produktong pang - aksiyon.
Sa artikulong ito, galugarin ang istraktura ng mga roleizer, lumakad sa isang makatotohanang pagpapatupad sa isang kontekstong pang-inhinyeriya, at talakayin kung kailan ito ilalapat (at kung kailan iiwasan ang over-engineering). (sa Ingles). Youifill tingnan kung paanong ang A Diversity Factory ay tumutulong sa iyo na gumawa ng mga sistema na umangkop sa mga evolving propesyunal na mga pagbabago nang hindi nagkokokokokokodigo ng mga pagbabago sa iyong codebase.
Pag - unawa sa Naiibang Disenyo ng Pabrika
Pagpapakahulugan sa Core
Ang A District Factory Radile ay naglalaan ng isang interface para sa paglikha ng mga pamilya ng mga bagay na nauugnay o umaasal nang hindi tinitiyak ang kanilang mga klase ng kongkreto.Umaasa ito sa abstraksyon upang ang isang pabrika ay makagawa ng maraming uri ng produkto na dinisenyo upang gumawang sama - sama.
- Ang Exception Factory — ay nagpapahayag ng isang set ng mga pamamaraan ng paglikha, isa para sa bawat kasapi ng produktong pamilya.
- Concrete Factory — mga kasangkapan sa paglikha ng mga pamamaraan upang makagawa ng mga produktong kongkreto para sa isang espesipikong pagkakaiba (hal.g., ⁇ Hardware Platform Aixi).
- [A Probact — ay nagpapahayag ng interface para sa isang uri ng produkto (hal.g., Sensor).
- ConcreteProduct — binibigyang kahulugan ang isang produktong nilikha ng katumbas na Concrete Factory.
- — gamitin lamang ang Acsound Pactory and A DiverseProduct interfaces.
Kung Paano Ito Umaandar
Ang client code ay tumatanggap ng halimbawa ng Acception Factory (kadalasang itinuturok sa pamamagitan ng pagsasaayos o runtime selection). Tinatawag nito ang mga paraan ng paglikha sa pabrika nang hindi nalalaman kung aling pabrika ng kongkreto ang gumawa ng mga ito.Ang mga bagay na ibinalik ay ginagarantiyahang magkasundo dahil ang mga ito ay galing sa iisang pamilya.
Halimbawa, sa isang sistema ng inhenyeriyang datos na nakakakuha, ang isang ⁇ HighSpeed Factoryić ay maaaring gumawa ng isang mataas na sensiyong sensor at isang kaukulang mabilis na pag-aalsa sa mga nagpapakilos; ang isang ⁇ Low EXPOCtory EXFREquency sensor at isang mababang physipwer leader.[1][kailangan ng sanggunian] Ang kliyente ay hindi kailanman makaalam ng mga espesipikong – ito ay basta tumatawag lamang sa at.
Mga Pakinabang sa Inhinyeriyang Software
Ang A Difficulty Factory Circle ay nagbibigay ng ilang bentaha na tuwirang tumatalakay sa mga hamon ng mga sistema ng inhinyeriya:
- Flexility: Swap buong mga pamilya ng mga sangkap sa pamamagitan ng pagbabago kung aling pabrika ang ginagamit ng inyong aplikasyon. Ito ay angkop para sa pagsuporta sa maramihang mga plataporma ng hardware, mga makinang pang-edukasyon, o mga kasangkapang UI na hindi nahahawakan ang lohikang pangnegosyo.
- [[T:1]: Ang magdagdag ng bagong pamilya (hal., pagsuporta sa bagong tatak ng sensor), pagpapatupad lamang ng isang bagong kongkretong pabrika at mga produkto nito.Ang umiiral na kodigo ay nananatiling hindi naitatatag, na sumusunod sa Open/Closed Principle.
- Statureable: Ang lohika sa paglikha ng mga nilalang ay sentralisado. Kapag nagbago ang isang lagda ng gusali, ang tanging ina-update mo ay ang katumbas na pabrika, hindi ang bawat lugar na nagreresulta sa klase.
- [Talaksan: Sa mga pagsubok sa unit, makapaglalaan ka ng isang pang-uyam na pabrika na gumagawa ng mga sangkap na stubbbl. Ang kodigong kliyente ay nananatiling hindi nagbabago, na gumagawa sa mga pagsubok na mas mabilis at mas maaasahan.
- : Ang mga software sa inhinyeriya ay kadalasang kailangang tumakbo sa iba't ibang operating system o hardware configence. a Diversion Factory ay nagpapahintulot sa iyo na lumikha ng mga platform na quarcific UI dialogs, mga layer ng file access, o mga salansan ng network sa likod ng isang karaniwang interface.
Pag - aalis ng Parisan sa Gawain
Hakbang-by-Tandaang Pag-iisyu
Upang maikapit ang A District Factory Radition sa iyong engineering software, sundin ang mga hakbang na ito:
- I-IPAS ang mga pamilya ng produkto — Mga tiyak na grupo ng mga bagay na dapat gamiting magkakasama. Sa isang kasangkapang pang-edukasyon, maaaring magkaroon ka , , at bilang isang pamilya sa bawat sakop ng pisika (e.g., linear static vs. dilinear dynamics.).
- Define abstraktong produkto interfaces[ — Lumikha ng isang interface bawat uri ng produkto. Halimbawa: , , .
- Plilikhain ang abstraktong interface — Ipahayag ang mga paraan ng paglikha ng bawat produkto: , , .
- Mga pabrikang kongkreto — Para sa bawat pamilya (hal.g., at ), magbigay ng mga tiyak na pagpapatupad ng mga pamamaraang iyon na nagbabalik ng angkop na mga klase ng produktong kongkreto.
- Configure the client — Ang kliyente ay tumatanggap ng halimbawa ng abstraktong pabrika (via dependency injection, configuration file, o isang simpleng runtime decision).
Halimbawa: MGA Pamilyang Tagalutas ng FEA
Gunigunihin na gumagawa ka ng isang multi-proficial element analysis platform. Ang iba't ibang analysis types ay nangangailangan ng iba't ibang fixers at mga kasangkapan bago ang pagproseso. sa paggamit ng A Distract Factory, maaari mong buuin ang iyong code tulad nito (pseudo physicode sa isang wika analogous sty):
// 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();
}
}
Ngayon, upang palitan ang mga uri ng analysis, basta nililikha mo ang makina na may ibang pabrika — walang ibang pagbabago sa kodigo. Ang disenyong ito ay ginagamit sa maraming komersiyal na mga pakete ng FEA upang suportahan ang iba't ibang physics module.
Real-World Scenance: Hardware Abstract for Embeted Systems
Isaalang - alang ang isang pangkat ng mga inhinyero na gumagawa ng mga firmware para sa isang autonomous drone. Ang bawat hardwack na pangkontrol ng eroplano ay gumagamit ng iba't ibang protocol ng komunikasyon (I2C, SPI, UART) at mga tipo ng revolve (ESC, servo).
Ang mahirap unawaing pabrika ay nagbibigay ng kahulugan sa mga pamamaraang katulad ng , , .[Crete mga pabrika ng kliente tulad ng at Ang isang bagong kasangkapang pangkontrol ng eroplano ay nakasalalay lamang sa mga abstraktong interfaces. Kung dumating ang isang bagong pagbabagong sensor, ang isang bagong pabrika ay nadadagdagan ng mga produktong pangkontrol na may alrigo sa aktuwal na pag-aribong pagsisikap na ito.
Ang gayong mga abstraksiyon ay mahalaga rin para sa unit testing — maaari mong iturok ang isang pakunwaring pabrika na nagbabalik ng nagayang mga pagbasa sa pandamdam, na nagpapangyari sa patuloy na pagsasama - sama nang walang pisikal na kagamitan.
Kung Paano Maihahambing sa mga Katangiang Nauugnay sa Buhay
Isang Destansiyal na Pamamaraan ng Pabrika
Ang na disenyo ay gumagamit ng iisang paraan (kadalasan ay halos totoo) para makagawa ng isang uri ng produkto. Ito ay mas simple pero gumagana lang para sa isang produkto.
Isang Debasyong Press ng Factory
Ang disenyo ay nakapokus sa paggawa ng isang masalimuot na bagay sa pamamagitan ng hakbang, kadalasan sa isang direktor na kumokontrol sa proseso ng pagtatayo.Ang paggawa ay tamang - tama kapag ang produkto ay nangangailangan ng maraming hakbang (e.g., pagbuo ng isang modelong CAD).
A District Factory vs. Dependency Injection (DI)
Kadalasang ginagamit ng mga lalagyan ng daI (e.g., Spring, .NET Core DI) ang A Distract Factory pattern sa ilalim ng hood. mairerehistro mo ang iyong mga kongkretong pabrika sa lalagyan at hahayaang malutas ito ng lalagyan.Ang disenyo mismo ay nananatiling pareho — DI lamang ang mga automate ang mga scene.
Pinakamabuting mga Gawain at mga Patibong
Kung Kailan Gagamitin ang Isang Depektong Prestinyón
- Ang iyong sistema ay kailangang maging hiwalay sa kung paano nililikha, binubuo, o kinakatawan ang mga produkto nito.
- Inaasahan mo ang maraming pamilya ng mga produkto na gagamiting sama - sama.
- Gusto mong ipatupad ang pagiging hindi pabagu - bago ng mga produkto.
Karaniwang mga Patibong
- [[Talaksan[Talaksan[[[T:1]: Ang pagdaragdag ng mga pabrika sa bawat maliliit na pagkakaiba ay humahantong sa hindi kinakailangang kasalimuutan.[kailangan ng sanggunian] Kung talagang may maramihan kang mga pamilyang produkto na nagkakapalit-palit.
- Too maraming uri ng produkto: Kung malaki ang iyong abstraktong interface ng pabrika (hal., 10+ pamamaraan), isaalang-alang ang paghahati sa mas maliliit na pabrika o ang paggamit ng paraan ng pag-eeebolusyon.
- Performance sa itaas[: Sa pagganap ng mga sistemang analitikong nakapaloob, ang ekstrang di-paglilinya ay maaaring maging problematiko. sa gayong mga kaso, gumamit ng regulatoryong politetime polymorphism (templates/generics) kung ang mga pahintulot ng wika, o maingat na profile.
Pagsasaayos
Ang A Difficulty Factory Tyle ay isang napatunayang paraan upang makagawa ng mga detalyeng madaling makuha, na makatutulong sa maraming pamilya na gumawa ng maraming bagay, sa pamamagitan ng pag - aayos ng mga bagay na nilalang, sa iyong core algorithms mula sa plataporma, sa madaling pag - aayos, pagsubok, at pakikibagay.
Para sa karagdagang pag-aaral, tumutukoy ang orihinal Wikipedia entry[, ang tiyak na [Refactoring Guru guide, o ang malalim na pagsisid sa Martin Fowler's katalogo[. Pahiran ng disenyo, at ang iyong software ay magiging handa para sa mga hamon bukas.