Zum Entwurf der Klassen für eine einfache shopping cart-Beispiel mit TDD-Ansatz?
Stieß ich auf einen Einkaufswagen übung, um zu lernen, OOAD und TDD mit Java.
Ist die übung:
Ersten Schritt: Design-ein checkout-system
- Bauen, ein checkout-system für ein Geschäft, das verkauft 3 Produkte sagen Brot, Milch und Bananen.
- Kosten für die Produkte sind : Brot - $1, Milch - $0.60-und Banana - $0.40
- Aufbau eines Systems zur Kasse, ein Einkaufswagen, können ein Vielfaches dieser 3 Produkte und zeigt die Gesamtsumme der Bestellungen.
Beispiele sind:
Brot, Milch, Banane = $2.00
Brot, Brot, Milch, Banane = $3.00
Milch, Banane, Milch, Banane = $2.00
Als nächsten Schritt: Verbesserung der code gelten die nachstehenden Rabatte und Angebote
Kaufen ein Brot und einen anderen bekommen Brot für freie
Kaufen 3-Milch für den Preis von 2
Kaufen Sie 2 Bananen und erhalten Sie eine gratis
Zunächst erstellen Sie eine einfache Lösung zur Befriedigung der erste Fall allein. Dann re-Faktor, den code zu erweitern, es für den 2. Schritt.
Der erste Schritt scheint einfach zu sein, aber wenn es um den zweiten Schritt, die Anwendung der richtigen OOAD-Prinzipien und design-patterns ist eine Herausforderung.
Ich schaute mir die paar Fragen wie
diese eine.
Aber es half nicht viel.
Schätze irgendwelche Vorschläge, wie gehen Sie vor.
Den code, ich könnte für den ersten Schritt ist :
-
ShoppingCartTest.java :
public class ShoppingCartTest { ShoppingCart cart; @Before public void setUp(){ cart = new ShoppingCart(); } @Test public void addOneItemToCart() { cart.add("Bread"); assertThat(cart.getTotalItems(), is(1)); assertThat(cart.doesContain("Bread"), is(true)); } @Test public void addTwoItemsToCart(){ cart.add("Bread"); cart.add("Milk"); assertThat(cart.getTotalItems(), is(2)); assertTrue(cart.doesContain("Bread")); assertTrue(cart.doesContain("Milk")); } @Test public void addThreeItemsToCart(){ cart.add("Bread"); cart.add("Milk"); cart.add("Banana"); assertThat(cart.getTotalItems(), is(3)); assertTrue(cart.doesContain("Bread")); assertTrue(cart.doesContain("Milk")); assertTrue(cart.doesContain("Banana")); } @Test public void addAnItemTwice(){ cart.add("Bread"); cart.add("Bread"); assertThat(cart.getTotalItems(), is(2)); } @Test public void checkOutOneItem(){ cart.add("Bread"); assertThat(cart.checkout(), is(1.0)); } @Test public void checkoutTwoSeparateItems(){ cart.add("Bread"); cart.add("Milk"); assertThat(cart.checkout(), is(1.60)); } @Test public void checkoutThreeSeparateItems(){ cart.add("Bread"); cart.add("Milk"); cart.add("Banana"); assertThat(cart.checkout(), is(2.0)); } @Test public void checkoutTwoSameItems(){ cart.add("Bread"); cart.add("Bread"); assertThat(cart.checkout(), is(2.0)); } @Test public void checkoutThreeItems(){ cart.add("Bread"); cart.add("Bread"); cart.add("Milk"); assertThat(cart.checkout(), is(2.6)); } @Test public void checkoutManyItems(){ cart.add("Bread"); cart.add("Bread"); cart.add("Milk"); cart.add("Milk"); cart.add("Banana"); assertThat(cart.checkout(), is(3.60)); } @Test public void checkOutAnInvalidItem(){ cart.add("InvalidItem"); assertThat(cart.checkout(),is(0.0)); }}
Shopping Cart.java:
import java.util.ArrayList;
import java.util.List;
public class ShoppingCart {
List<String> items;
public ShoppingCart(){
items = new ArrayList<String>();
}
public void add(String item) {
items.add(item);
}
public int getTotalItems() {
return items.size();
}
public Boolean doesContain(String itemName) {
return items.contains(itemName);
}
public Double checkout() {
double total = 0;
for(String item: items){
if(item.equals("Bread")){
total += 1;
}else if(item.equals("Milk")){
total += 0.6;
}else if(item.equals("Banana")){
total += 0.4;
}
}
return total;
}
}
Stimme mit Ihnen überein. Ich entwickle den ersten Teil des Codes, und teilen Sie es bald.
Ich erstellte eine ähnliche, github.com/vksvicky/ShoppingCart
Gut, Das GitHub-Projekt sieht ziemlich reif - sind Sie vor irgendwelche Probleme gibt? Wenn ja, können Sie bitte sagen, welche Fehler Ihr gegenüber?
Danke für die ausführliche Projekt. Ich nehme einen Blick auf Sie. Kam diese Lösung basiert auf TDD oder hast du die Entwicklung dieses ersten, und die zusätzlichen tests?
InformationsquelleAutor Ano | 2014-10-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stattdessen können Sie einfach Implementieren Warenkorb-Prozess, da die HashMap im java
es wird von der form :
InformationsquelleAutor user1540256