Bir app bazı özel sürümlerini yönetmek için en iyi uygulamalar

5 Cevap php

Ben çok yüzü vardır ve şimdiye kadar temalar yaratarak bu uygulanan ettik bir web uygulaması var. Bir tema html, css ve ortak arka ucu ile kullanılacak görüntülerin bir dizi.

Yapılacak şöyle ortaya koydu:

code/
themes/theme1
themes/theme2

Ve web uygulamasının her örneği kullanılması gerektiğini hangi tema bildiren bir yapılandırma dosyası vardır. Örnek:

theme="theme1"

Şimdi yeni iş kuralları sadece html / css / görüntüleri değiştirmek ve arka uç değiştirme gerektiren yoluyla elde edilemeyen bazı temalar değişiklik yapmak için bana soruyorsun. Bazı durumlarda bu değişiklikler temaları bir gruba uygulanması gerekir.

Ben iyi kodunda nasıl hallederim ayrıca diske bu ortaya koymak, ve nasıl merak ediyorum. Ben başkası buna karşı gelmek olmalı eminim.

Bir fikir sahip olmaktır:

code/common
code/theme1
code/theme2
themes/theme1
themes/theme2

Sonra benim ortak kod code/theme1 code/common sonra, ilk aranır olduğunu include_path böyle belirledik.

Ben uzmanlaşmak istiyorsanız, o zaman için LogoutPage class theme2, ben sadece [(3)] {altında aynı yolu code/common adlı sayfayı kopyalayabilirsiniz söylüyor } ve özel sürümünü almak olacaktır.

Bu fikir ile bir sorun, aynı ada sahip birden çok sınıfları orada olacak olmasıdır. Teoride aynı yürütme dahil asla rağmen, ben orijinal temel sınıf uzatmak mümkün olmaz.

Peki ben taban sınıfı için benzersiz bir isim yapmak için olsaydı? örneğin Theme1LogoutPage extends LogoutPage. Bununla öngörebiliriz bir sorun bazı ortak kod referansları (Dispatcher söylüyorlar) durumdur LogoutPage. Ben memuru için koşullar ekleyebilirsiniz, ancak bu işlemek için daha şeffaf bir yolu var acaba?

Aklıma başka bir seçenek, her tema için ayrı şube korumak için, ama bu işin bir sürü olabileceğini düşünüyorum.

Düşünün son bir şey özellikleri bir tema köken ve ardından ortak kod temeli kaynaştırılmaları gerektirebilir olmasıdır.

Herhangi bir giriş büyük takdir. Herhangi bir fark yaparsa, o bir lamba ortam.

5 Cevap

Ben sitenin farklı sürümleri farklı işlevselliğini uygulamak için bir araç olarak Strateji deseni kullanarak araştırmak istiyorum. Yapılandırmanızda alır ve buna dayalı uygun kod stratejisini sağlayan bir fabrika var. Bu bakış çağıran sınıf 'noktasından değiştirilebilir böylece Her strateji bazı ortak bir arayüz uygulayabilirsiniz. Bu Fabrika sınıf, Yapılandırma sınıf ve değişiklik yapmak için uygulanması gereken yeni bir strateji sınıflar için yeni stratejiler uygulayacak değişiklikleri izole eder. Sen farklı sürümleri arasında farklılık gerekir herhangi bir kullanıcı kontrolleri ile aynı (veya benzer) yapabilirdi.

Ben (yani C # gibi kuşkuyla görünebilir) pseudocode ile göstermek gerekir

public interface ILogoutStrategy
{
   void Logout();
}

public abstract class AbstractLogoutStrategy : ILogoutStrategy
{
   public virtual void Logout()
   {
      // kill the sesssion
   }
}

public class SingleSiteLogoutStrategy : AbstractLogoutStrategy
{
   public void Logout()
   {
      base.Logout();
      // redirect somewhere
   }
}

public class CentralAuthenticationSystemLogoutStrategy : AbstractLogoutStrategy
{
   public void Logout()
   {
      base.Logout();
      // send a logout request to the CAS
      // redirect somewhere
   }
}

public static class StrategyFactory
{
   public ILogoutStrategy GetLogoutStrategy(Configuration config)
   {
      switch (config.Mode)
      {
         case Mode.CAS:
            return new CentralAuthenticationSystemLogoutStrategy();
            break;
         default:
         case Mode.SingleSite:
           return new SingleSiteLogoutStrategy();
           break;

      }
   }
}

Örnek kullanım:

ILogoutStrategy logoutStrategy = StrategyFactory.GetLogoutStrategy( config );
logoutStrategy.Logout();

Eğer Master Pages kullanıyor musunuz? Eğer farklı bir düzen ve UI malzeme gerekiyorsa sadece örneklerinin her biri için ana sayfaları farklı bir dizi olabilir. Özel davranış gerekiyorsa o zaman Dependency Injection içine bakmak isteyebilirsiniz. Spring.NET vs

Ne gerek şablonlar.

Oradan size sunu kodunuzu ayırabilirsiniz.

Ben çok smarty şablonları öneririz. Ayrıca ARMUT template_it.

http://www.smarty.net/

Bu aynı zamanda kod çok daha rahat olun. Amaç, php hiçbir html var, ve html hiçbir php sahip olmaktır.

o zaman yapmanız gereken bütün her tema için kullanılan html şablonu değiştirmek olduğunu. veya şablonları klasör.

You could have: /common/code

And: /sitename/code

All files in /common/code are abstract classes. For every file in /common/code, just create a corresponding non-abstract class file in /sitename/code that INHERITS from the abstract class in /common/code.

This way you only need to implement CHANGES in the /sitename/code Everything else is core functionality that exists only in /common/code

Burada yapılacak önemli şey, sadece soyut sınıflar için public yöntemleri eklemek emin olduğunu. Bu şekilde yöntemleri tüm siteler için kullanılabilir ve tüm sitelerden sınıflar tedavi edilebilir / özdeş ile çalıştı.

Ben yapardı:

[theme name]/[subfolder] default/common default/common/html default/common/css red/code red/common red/common/html red/common/css red/code green/common green/common/html

Kod veya başka bir bileşen yoksa Yani varsayılan geri düşecek.

Ama aslında ben svn web şube olacağını, bu yüzden geliştikçe ortak kod eğer, vb birleştirebilirsiniz at Subversion'ı bakın:. http://subversion.tigris.org/