SORU
25 ŞUBAT 2012, CUMARTESİ


Ne kadar mükemmel OOP uygulama oluşturmak için

Son zamanlarda bir şirket için çalışıyordum‘’. x Bana bazı sorular seti gönderdiler ve bana sadece olayı çözmek için söyledi.

Sorun bu gibi

Temel satış vergisi bütün mal  oranında uygulanacak, muaf kitap, gıda ve tıbbi ürünler hariç.
İthalat vergisi ek satış vergisi, istisnasız yüzde 5 oranında alınan tüm mallar için geçerlidir.

Ne zaman satın öğeleri alıyorum bilgisi olan listeler adını tüm öğeleri ve fiyatı (vergi dahil), terbiye ile toplam maliyet kalemleri ve toplam miktarda satış vergileri ödedi.
Satış vergisi için yuvarlama kuralları%, p raf fiyatı (np/100 kadar yakın 0.05 yuvarlak) satış vergisi tutarı içeren n bir vergi oranı için.

“İlgilendiklerini söyledilerEn-Boy Tasarımçözümünüz ve ben değerlendirmek istiyorumNesne Yönelimli Programlama Bilgisi.”

Bu kendi sözleriyle anlattılar

  • Çözüm için, ya da Java kullanmak isteriz, Ruby veya C#.
  • Çözüm TASARIM YÖNÜ ilgilendi ve değerlendirmek istiyorumNesne Yönelimli Programlama Bilgisi.
  • Bina veya test amaçlı dış kütüphaneleri veya Araçları kullanabilirsiniz. Özellikle, birim test kitaplığı kullanın veya araçlar seçtiğiniz dil için kullanılabilir inşa edebilir (örneğin, JUnit, Ant, NUnit, NAnt, Test::Unit, Komisyon vb.)
  • İsteğe bağlı olarak, aynı zamanda sizin kod ile birlikte tasarım ve varsayımlar hakkında kısa bir açıklama içerebilir.
  • Lütfen web-tabanlı bir uygulama ya da kapsamlı bir UI bekliyoruz unutmayın. Bunun yerine, basit bir bekliyor tabanlı konsol uygulaması ve kaynak kodu ile ilgileniyoruz.

Aşağıdaki kodu için sağlanan bu yüzden sadece yapıştır kodu kopyalayın ve VS çalıştırabilirsiniz.

class Program
 {
     static void Main(string[] args)
     {
         try
         {
             double totalBill = 0, salesTax = 0;
             List<Product> productList = getProductList();
             foreach (Product prod in productList)
             {
                 double tax = prod.ComputeSalesTax();
                 salesTax  = tax;
                 totalBill  = tax   (prod.Quantity * prod.ProductPrice);
                 Console.WriteLine(string.Format("Item = {0} : Quantity = {1} : Price = {2} : Tax = {3}", prod.ProductName, prod.Quantity, prod.ProductPrice   tax, tax));
             }
             Console.WriteLine("Total Tax : "   salesTax);
             Console.WriteLine("Total Bill : "   totalBill);                
        }
         catch (Exception ex)
         {
             Console.WriteLine(ex.Message);
         }
         Console.ReadLine();
     }

    private static List<Product> getProductList()
     {
         List<Product> lstProducts = new List<Product>();
         //input 1
         lstProducts.Add(new Product("Book", 12.49, 1, ProductType.ExemptedProduct, false));
         lstProducts.Add(new Product("Music CD", 14.99, 1, ProductType.TaxPaidProduct, false));
         lstProducts.Add(new Product("Chocolate Bar", .85, 1, ProductType.ExemptedProduct, false));

        //input 2
         //lstProducts.Add(new Product("Imported Chocolate", 10, 1, ProductType.ExemptedProduct,true));
         //lstProducts.Add(new Product("Imported Perfume", 47.50, 1, ProductType.TaxPaidProduct,true));

        //input 3
         //lstProducts.Add(new Product("Imported Perfume", 27.99, 1, ProductType.TaxPaidProduct,true));
         //lstProducts.Add(new Product("Perfume", 18.99, 1, ProductType.TaxPaidProduct,false));
         //lstProducts.Add(new Product("Headache Pills", 9.75, 1, ProductType.ExemptedProduct,false));
         //lstProducts.Add(new Product("Imported Chocolate", 11.25, 1, ProductType.ExemptedProduct,true));
         return lstProducts;
     }
 }

public enum ProductType
 {
     ExemptedProduct=1,
     TaxPaidProduct=2,
     //ImportedProduct=3
 }

class Product
 {
     private ProductType _typeOfProduct = ProductType.TaxPaidProduct;
     private string _productName = string.Empty;
     private double _productPrice;
     private int _quantity;
     private bool _isImportedProduct = false;

    public string ProductName { get { return _productName; } }
     public double ProductPrice { get { return _productPrice; } }
     public int Quantity { get { return _quantity; } }

    public Product(string productName, double productPrice,int quantity, ProductType type, bool isImportedProduct)
     {
         _productName = productName;
         _productPrice = productPrice;
         _quantity = quantity;
         _typeOfProduct = type;
         _isImportedProduct = isImportedProduct;
     }

    public double ComputeSalesTax()
     {
         double tax = 0;
         if(_isImportedProduct) //charge 5% tax directly
             tax =_productPrice*.05;
         switch (_typeOfProduct)
         {
             case ProductType.ExemptedProduct: break;
             case ProductType.TaxPaidProduct:
                 tax  = _productPrice * .10;
                 break;
         }
         return Math.Round(tax, 2);
         //round result before returning
     }
 }

giriş uncommnet ve farklı girişler için çalıştırabilirsiniz.

Reddedildim ama ben bir çözüm sağladı.

"Kod çözümü tatmin edici değildir, çünkü mevcut açık pozisyonlar için bana düşünmek için veremiyoruz dediler."

Burada eksik olan şey, bana yol lütfen. Bu çözüm iyi OOAD bir çözüm değildir.
Nasıl OOAD becerilerimi geliştirebilirim.
Benim büyükler de mükemmel OOAD uygulama da pratikte çalışmaz diyor.

Teşekkürler

CEVAP
25 ŞUBAT 2012, CUMARTESİ


Öncelikleaman Yarabbi çift finansal hesaplamalar yapma. Finansal hesaplamalar yapmakondalık; bu onun için. Çift kişilik çözmek içinfizikproblem değilmalisorunları.

Programınızı büyük bir tasarım hatasıpolitika yanlış yerde. Vergi bilgi işlem sorumlusu kim? Koydukürünvergiler, ama bir elma satın aldığınızda, bir kitap ya da bir çamaşır makinesi bilgisayar başında,bir şey satın alıyoronu ödemek için gidiyoruz nasıl söylüyorsun sorumlu değildir.Hükümet politikasıbunları sana anlattığım için sorumludur. Tasarım kitlesel temel nesneye yönelik tasarım prensipleri ihlal etmektedirnesneleri kendi sorunları için sorumlu olmalıdırve başka birinin değil. Çamaşır makinesi endişe kıyafetlerinizi yıkamak, doğru ithalat vergisi şarj değil. Eğer vergi yasaları değiştirmek istiyorsanız, değiştirmek istemiyorumçamaşır makinesinin nesnedeğiştirmek istediğinizpolitika nesnesi.

Nasıl gelecekte bu sorunlar yaklaşım?

Sorun açıklaması her önemli isim vurgulayarak başlayacaktım:

Temel satış vergisibir . anda geçerlioranı10% tümmalhariçkitaplar,gıdavetıbbi ürünlerbu muaftırlar.Görev almabir eksatış vergisiyürürlükteki tüm ilgiliithal malbir deoranıhayır . %5, ^strong>muafiyetler. Ben satın alırkenöğeleriBir alıyorummakbuzbu listeleradıtümöğelerive onlarınfiyat(dahil olmak üzerevergi) ile bitiriyorumtoplam maliyetöğeleri ve toplam tutarlarsatış vergileriödedi. Yuvarlama kurallarısatış vergisi%, n bir vergi oranı içinraf fiyatıp içerir (np/100 kadar yakın 0.05 yuvarlak) miktarısatış vergisi.

Şimdi, tüm bu isimler arasında nasıl bir ilişki vardır?

  • Temel Satış Vergisi Satış Vergisi türüdür
  • İthalat Vergisi Satış Vergisi türüdür
  • Bir Satış Vergisi bir Ondalık bir Oranı vardır
  • Kitaplar Madde türüdür
  • Gıda maddesi türüdür
  • Tıbbi Ürünler Madde türüdür
  • Öğeleri İthal Mal olabilir
  • Bir Öğe bir Dize olan bir Adı vardır
  • Bir Öğeyi bir Ondalık olan Raf bir Fiyatı vardır. (Not: bir öğeyi gerçekten bir fiyat var mı? iki özdeş çamaşır makineleri, farklı zamanlarda aynı mağazada farklı mağazalarında, ya da farklı fiyatlarla satış için olabilir. Daha iyi bir tasarım Fiyatlandırma Politikası Fiyatı için Öğeyi ilgili olduğunu söylemek olabilir.)
  • Satış Vergisi Muafiyet İlkesi altında bir Satış Vergisi bir Öğe üzerinde uygulanmaz koşulları açıklar.
  • Makbuz Öğeleri, fiyatlarını ve vergilerini bir listesi vardır.
  • Bir Makbuz bulunuyor
  • Makbuz toplam vergi vardır

... ve benzeri. İsimlerin hepsi işe yaradı arasındaki tüm ilişkileri varsa, o zaman bir sınıf hiyerarşisi tasarımı başlayabilirsiniz. Soyut temel sınıf Öğesi yoktur. Kitabı buradan alır. Soyut bir sınıf Satışvergisi var; BasicSalesTax buradan alır. Ve benzeri.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jeb Corliss

    Jeb Corliss

    17 Kasım 2006
  • LiquidMusick

    LiquidMusick

    23 Aralık 2010
  • New Scientist

    New Scientis

    27 Kasım 2006