Is cepheye diğer sınıfların bir sürü içeren bir sınıf?
Onu tasarım deseni yapan nedir? Benim için normal bir sınıf gibi.
Bana bu Cephe modelini açıklayabilir misiniz ?
Is cepheye diğer sınıfların bir sürü içeren bir sınıf?
Onu tasarım deseni yapan nedir? Benim için normal bir sınıf gibi.
Bana bu Cephe modelini açıklayabilir misiniz ?
Yanıtlar:
Tasarım deseni, tekrar eden bir sorunu çözmenin yaygın bir yoludur. Tüm tasarım modellerindeki sınıflar sadece normal sınıflardır. Önemli olan, nasıl yapılandırıldıkları ve belirli bir sorunu en iyi şekilde çözmek için birlikte nasıl çalıştıklarıdır.
Cephe tasarım modeli karmaşık bir sistem arayüzü kolaylaştırır; çünkü genellikle karmaşık sistemin alt sistemlerini oluşturan tüm sınıflardan oluşur.
Bir dış cephe sistemi karmaşık bilgi kullanıcının korur ve bir ile sağlamaktadır simplified view
olan o easy to use
. Ayrıca decouples
, sistemi alt sistemlerin ayrıntılarından kullanan ve daha sonra sistemi değiştirmeyi kolaylaştıran kod.
http://www.dofactory.com/Patterns/PatternFacade.aspx
http://www.blackwasp.co.uk/Facade.aspx
Ayrıca, tasarım modellerini öğrenirken önemli olan, hangi modelin verdiğiniz probleminize uyduğunu ve sonra onu uygun şekilde kullanabilmesidir. Bir deseni kötüye kullanmak veya onu bildiğiniz için bazı problemlere uydurmaya çalışmak çok yaygın bir şeydir. Tasarım kalıplarını öğrenirken bu tuzaklardan haberdar olun.
Wikipedia'nın Cephe deseninin harika bir örneği var.
/* Complex parts */
class CPU {
public void freeze() { ... }
public void jump(long position) { ... }
public void execute() { ... }
}
class Memory {
public void load(long position, byte[] data) { ... }
}
class HardDrive {
public byte[] read(long lba, int size) { ... }
}
/* Facade */
class ComputerFacade {
private CPU processor;
private Memory ram;
private HardDrive hd;
public ComputerFacade() {
this.processor = new CPU();
this.ram = new Memory();
this.hd = new HardDrive();
}
public void start() {
processor.freeze();
ram.load(BOOT_ADDRESS, hd.read(BOOT_SECTOR, SECTOR_SIZE));
processor.jump(BOOT_ADDRESS);
processor.execute();
}
}
/* Client */
class You {
public static void main(String[] args) {
ComputerFacade computer = new ComputerFacade();
computer.start();
}
}
Önceki cevapta açıklandığı gibi, tüketen müşteriye basit bir arayüz sağlar. Örneğin: "ESPN'yi izle" amaçlanan işlevdir. Ancak aşağıdaki gibi birkaç adım içerir:
Ancak cephe bunu basitleştirecek ve sadece istemciye "ESPN izle" işlevini sağlayacaktır.
Cephe, sistemin karmaşıklıklarını gizler ve istemciye sisteme erişebileceği bir arabirim sağlar.
public class Inventory {
public String checkInventory(String OrderId) {
return "Inventory checked";
}
}
public class Payment {
public String deductPayment(String orderID) {
return "Payment deducted successfully";
}
}
public class OrderFacade {
private Payment pymt = new Payment();
private Inventory inventry = new Inventory();
public void placeOrder(String orderId) {
String step1 = inventry.checkInventory(orderId);
String step2 = pymt.deductPayment(orderId);
System.out
.println("Following steps completed:" + step1
+ " & " + step2);
}
}
public class Client {
public static void main(String args[]){
OrderFacade orderFacade = new OrderFacade();
orderFacade.placeOrder("OR123456");
System.out.println("Order processing completed");
}
}
OrderFacade
mu? Örneğinizde, Payment
ve Inventory
? Arasında
Kısa ve basit bir açıklama:
Cepheli ve Cephesiz senaryoyu anlamaya çalışın: Parayı accout1'den account2'ye aktarmak istiyorsanız, çağrılacak iki alt sistem hesaptan çekilip hesap2'ye yatırılır.
Sorgularınızla ilgili olarak:
Cephe çok fazla sınıf içeren bir sınıf mı?
Evet. Uygulamadaki birçok alt sistem için bir sargıdır.
Onu tasarım deseni yapan nedir? Benim için normal bir sınıf gibi
Tüm tasarım desenleri de normal sınıflardır. @ Unmesh Kondolikar bu soruyu doğru cevapladı.
Bana bu Cephe hakkında açıklayabilir misiniz, ben tasarım desenleri konusunda yeniyim.
GoF'a göre, Cephe tasarım deseni şu şekildedir:
Bir alt sistemdeki bir dizi arabirime birleşik bir arabirim sağlayın. Cephe Kalıbı, alt sistemin kullanımını kolaylaştıran daha üst düzey bir arayüz tanımlar
Cephe modeli tipik olarak zaman kullanılır:
Cleartrip web sitesinin gerçek bir kelimesini ele alalım .
Bu web sitesi rezervasyon için seçenekler sunar
Kod snippet'i:
import java.util.*;
public class TravelFacade{
FlightBooking flightBooking;
TrainBooking trainBooking;
HotelBooking hotelBooking;
enum BookingType {
Flight,Train,Hotel,Flight_And_Hotel,Train_And_Hotel;
};
public TravelFacade(){
flightBooking = new FlightBooking();
trainBooking = new TrainBooking();
hotelBooking = new HotelBooking();
}
public void book(BookingType type, BookingInfo info){
switch(type){
case Flight:
// book flight;
flightBooking.bookFlight(info);
return;
case Hotel:
// book hotel;
hotelBooking.bookHotel(info);
return;
case Train:
// book Train;
trainBooking.bookTrain(info);
return;
case Flight_And_Hotel:
// book Flight and Hotel
flightBooking.bookFlight(info);
hotelBooking.bookHotel(info);
return;
case Train_And_Hotel:
// book Train and Hotel
trainBooking.bookTrain(info);
hotelBooking.bookHotel(info);
return;
}
}
}
class BookingInfo{
String source;
String destination;
Date fromDate;
Date toDate;
List<PersonInfo> list;
}
class PersonInfo{
String name;
int age;
Address address;
}
class Address{
}
class FlightBooking{
public FlightBooking(){
}
public void bookFlight(BookingInfo info){
}
}
class HotelBooking{
public HotelBooking(){
}
public void bookHotel(BookingInfo info){
}
}
class TrainBooking{
public TrainBooking(){
}
public void bookTrain(BookingInfo info){
}
}
Açıklama:
FlightBooking, TrainBooking and HotelBooking
büyük sistemin farklı alt sistemleridir: TravelFacade
TravelFacade
aşağıdaki seçeneklerden birine rezervasyon yapmak için basit bir arayüz sunar
Flight Booking
Train Booking
Hotel Booking
Flight + Hotel booking
Train + Hotel booking
TravelFacade'den kitap API'sı dahili olarak alt sistem API'lerini çağırır
flightBooking.bookFlight
trainBooking.bookTrain(info);
hotelBooking.bookHotel(info);
Bu şekilde, TravelFacade
alt sistem API'lerini açığa çıkarmadan daha basit ve daha kolay API sağlar.
Önemli çıkarımlar : ( Pankaj Kumar'ın Journaldev makalesinden )
Daha iyi anlamak için kaynak bulma makalesine de bir göz atın .
Cephe deseni, daha basit bir arayüz üretmek için birçok diğer arayüzün bir sargısıdır.
Tasarım kalıpları, tekrar eden sorunları çözdüğü ve genel olarak kodu basitleştirdiği için faydalıdır. Aynı kalıpları kullanmayı kabul eden bir geliştirici ekibinde, birbirlerinin kodunu korurken verimliliği ve anlayışı geliştirir.
Daha fazla desen hakkında okumaya çalışın:
Cephe Kalıbı: http://www.dofactory.com/Patterns/PatternFacade.aspx#_self1
veya daha genel olarak: http://www.dofactory.com/Patterns/Patterns.aspx
Cephe kalıbının ek bir kullanımı da ekibinizin öğrenme eğrisini azaltmak olabilir. Sana bir örnek vereyim:
Excel tarafından sağlanan COM nesne modelini kullanarak uygulamanızın MS Excel ile etkileşim kurması gerektiğini varsayalım. Ekip üyelerinizden biri tüm Excel API'lerini bilir ve üstünde uygulamanın tüm temel senaryolarını karşılayan bir Cephe oluşturur. Ekipteki başka hiçbir üyenin Excel API'sini öğrenmek için zaman harcaması gerekmez. Ekip, cepheyi, bir senaryoyu yerine getirmeye dahil olan iç kısımları veya tüm MS Excel nesnelerini bilmeden kullanabilir. Harika değil mi?
Böylece, karmaşık bir alt sistemin üstünde basitleştirilmiş ve birleştirilmiş bir arayüz sağlar.
Cephe için başka bir örnek: uygulamanızın veritabanına bağlandığını ve sonuçları kullanıcı arayüzünde görüntülediğini varsayalım. Uygulamayı, veritabanı kullanarak veya sahte nesnelerle çalıştırıldığı gibi yapılandırılabilir hale getirmek için cepheyi kullanabilirsiniz. Böylece, uygulama yapılandırmasını okuyacak ve db sorgusunu başlatmaya veya sahte nesneyi döndürmeye karar vereceği cephe sınıfına tüm veritabanı çağrılarını yapacaksınız. bu şekilde db kullanılamıyorsa uygulama db'den bağımsız hale gelir.
Bir cephe, çoğunlukla çağrılan basitleştirilmiş işlevleri ortaya çıkarır ve uygulama, istemcilerin aksi takdirde uğraşması gereken karmaşıklığı gizler. Genel olarak uygulama içinde birden fazla paket, sınıf ve işlev kullanır. İyi yazılmış cepheler diğer sınıflara doğrudan erişimi nadir yapar. Örneğin bir ATM'yi ziyaret ettiğimde ve bir miktar para çektiğimde. ATM, doğrudan sahip olduğu bankaya mı yoksa harici bir banka için müzakere edilmiş bir ağa mı gideceğini gizler. ATM, müşteri olarak doğrudan uğraşmak zorunda olmadığım birden fazla cihaz ve alt sistem tüketen bir cephe görevi görür.
Desenin çok iyi bir gerçek yaşam örneği var - Araba marş motoru .
Sürücüler olarak, anahtarı açıyoruz ve araba çalışıyor. Olabildiğince basit. Perde arkasında, otomobilin başarılı bir şekilde başlaması için diğer birçok otomobil sistemi (akü, motor, yakıt vb.) Yer alır, ancak marş motorunun arkasında gizlidirler.
Gördüğünüz gibi, araba marş Cephe. Diğer tüm araç sistemlerinin karmaşıklığı konusunda endişelenmeden, kullanımı kolay bir arayüz sağlar.
Özetleyelim:
Cephe deseni, daha geniş, anlaşılır ve kullanımı kolay bir arayüz sağlayarak büyük kod bloklarının veya API'lerin karmaşıklığını basitleştirir ve gizler.
Cephe, bir araç kiti ve eksiksiz bir uygulama arasında yer alan ve bir paket veya alt sistemdeki sınıfların basitleştirilmiş kullanımını sunan bir işlevselliğe sahip bir sınıftır. Cephe modelinin amacı, bir altsistemin kullanımını kolaylaştıran bir arayüz sağlamaktır. - C # kitap Tasarım Desenleri ayıklayın .
Cephe, karmaşık bir alt sistemin tek bir arayüz nesnesi içinde kapsüllenmesini tartışır. Bu, alt sistemi başarıyla kullanmak için gerekli öğrenme eğrisini azaltır. Ayrıca, alt sistemin potansiyel olarak birçok istemcisinden ayrılmasını destekler. Öte yandan, Cephe alt sistem için tek erişim noktasıysa, "uzman kullanıcılar" ın ihtiyaç duyabileceği özellikleri ve esnekliği sınırlayacaktır.
Tasarım deseni, yazılım tasarımında belirli bir bağlamda yaygın olarak ortaya çıkan bir soruna genel yeniden kullanılabilir bir çözümdür.
Cephe tasarım modeli, sınıflar veya varlıklar arasında ilişki yaratmanın bir yolunu tanımladığı için yapısal bir modeldir. Cephe tasarım deseni, daha karmaşık bir alt sistem için basitleştirilmiş bir arayüz tanımlamak için kullanılır.
Cephe modeli, çok sayıda birbirine bağlı sınıfla veya özellikle kullanımı karmaşık olduğunda veya anlaşılması zor olduğunda, birden çok yöntemin kullanılmasını gerektiren sınıflarla çalışırken idealdir. Cephe sınıfı, kolayca anlaşılabilen ve kullanımı kolay bir dizi eleman içeren bir "sargı" dır. Bu üyeler, uygulama ayrıntılarını gizleyerek cephe kullanıcısı adına alt sisteme erişir.
Cephe tasarım deseni, kaynak kodu kullanılamadığı veya mevcut arayüz yaygın olarak kullanıldığı için, kötü tasarlanmış ancak yeniden düzenlenemeyen alt sistemleri sararken özellikle kullanışlıdır. Bazen farklı amaçlar için işlevsellik alt kümeleri sağlamak için birden fazla cephe uygulamaya karar verebilirsiniz.
Cephe modelinin örnek kullanımlarından biri, bir web sitesini bir iş uygulamasına entegre etmektir. Mevcut yazılım, belirli bir şekilde erişilmesi gereken büyük miktarlarda iş mantığı içerebilir. Web sitesi, bu iş mantığına yalnızca sınırlı erişim gerektirebilir. Örneğin, web sitesinin satış için bir ürünün sınırlı bir stok seviyesine ulaşıp ulaşmadığını göstermesi gerekebilir. Cephe sınıfının IsLowStock yöntemi, bunu belirtmek için bir Boolean değeri döndürebilir. Sahne arkasında, bu yöntem mevcut fiziksel stoğu, gelen stoğu, tahsis edilen kalemleri ve her bir kalem için düşük stok seviyesini işlemenin karmaşıklığını gizliyor olabilir.
Tüm tasarım modelleri, belirli bir uygulamaya uyan bir şekilde veya başka bir şekilde düzenlenmiş bazı sınıflardır. Cephe modelinin amacı, bir işlemin veya işlemlerin karmaşıklığını gizlemektir. Bir örnek görebilir ve cephe desenini http://preciselyconcise.com/design_patterns/facade.php adresinden öğrenebilirsiniz.
Bu sadece birden fazla yöntemi çağırmak için bir sarıcı oluşturma. X () ve y () yöntemiyle bir A sınıfınız ve k () ve z () yöntemiyle B sınıfınız var. Bir kerede x, y, z çağırmak istiyorsanız, bunu yapmak için Facade desenini kullanarak sadece bir Facade sınıfı oluşturun ve xyz () diyelim bir yöntem oluşturun. Her yöntemi (x, y ve z) tek tek çağırmak yerine, bu yöntemleri çağıran cephe sınıfının sarma yöntemini (xyz ()) çağırmanız yeterlidir.
Benzer desen veri havuzudur, ancak temel olarak veri erişim katmanı içindir.
Cephe Tasarım Deseni Yapısal Tasarım Deseni altına girer. Kısacası Cephe dış görünüş anlamına gelir. Cephe tasarım deseninde bir şeyi gizliyoruz ve sadece müşterinin gerçekten neye ihtiyacı olduğunu gösteriyoruz. Aşağıdaki blogdan daha fazlasını okuyun: http://www.sharepointcafe.net/2017/03/facade-design-pattern-in-aspdotnet.html
Cephe modeli alt sistem arayüz grubuna birleşik bir arayüz sağlar. Cephe, alt sistemle çalışmayı basitleştiren yüksek seviyeli bir arayüz tanımlar.