2010-03-22 85 views
0

我寫了一個處理私人股票市場的小應用程序。我在一個表中(爲了簡化問題),所有的數據存儲與下列:在應用程序中拆分私人股票市場數據包的問題

ID,TRANSACTIONTYPE,數量,編號自,數字太多,客戶編號,日期
1,買,100,AB1000, AB1099,5,2009-01-30
2,出售,100,AB1000,AB1099,5,2010-01-01
3,購買,40,AB500,AB539,5,2010-01-01

它就像所有人一樣。當我的用戶想要獲取信息時,客戶有什麼程序總結了他在BuySell上做的+,確保號碼匹配(在公開市場上沒有股票號碼,私人有)。到目前爲止,我的程序無法部分銷售任何東西。例如,如果我以前沒有買過股票,我就不能賣出30只股票。所以,即使你的客戶可能有40只股票,我只能賣出40只,但不是30只,因爲數量不匹配。

我今天問我們是否可以改變它(他們改變了原來的要求),我希望得到一些建議,如果真的這樣做的正確方法:

如果客戶有100只股票,然後試着只賣30號AB1030 - AB1059我會插入這樣的事情在我的表:

ID,TRANSACTIONTYPE,數量,編號自,數字太多,客戶端ID
4,分裂,100,AB1000 ,AB1099,5
5,Split +,30 ,AB1000,AB1029,5
6,分割+,30%,AB1030,AB1059,5
7,分割+,40%,AB1060,AB1099,5
8,出售,30%,AB1030,AB1059,5

我甚至不能向用戶展示這個Split,以免他/她太多混淆。就像一個補充,我不保留實時數據,我只保留歷史記錄,如果我想得到current information,我總是必須重新計算所有內容。我這樣實施它,因爲他們經常使用舊數據來檢查較舊日期的客戶的當前狀態等。

您的建議是什麼?這種方法是好的還是我應該完全重寫它。請記住,該系統已經生效,所以我將不得不以某種方式遷移它。而且它也不應該是一個全面的返工,因爲我很難得到它的支付,所以沒有6個月的時間來解決它。

回答

1

我們可以看到你的業務邏輯中有一些小代碼,以及對買入/賣出股票有什麼樣的限制嗎? 我想你不得不重新考慮一下當你賣出不同的金額時,向你的顧客說停止。如果你的企業需要限制銷售你沒有購買的東西,那麼也許你不能出售它(但)?或者只有在特定規則適用的情況下才可以出售。

+0

那麼這個小應用程序是100K線長,背後都有一些重(小白)的邏輯。不是那些會做賣/買東西,而是僱員(1-2人)的顧客。現在一切都可以以小包出售,如果你買了100只股票,你可以賣出100只符合它們數量的股票,或者如果它沒有被封鎖。所以他們唯一想改變的就是他們可以按照自己的意願拆分這100只股票,這樣他們就可以從這100只股票中拿出30只股票,然後把它賣掉。他們會選擇他們想要出售的金額和數量。所以在某些情況下,它會匹配購買的早期數據包 – MadBoy 2010-03-22 18:28:49

+0

,有時它不會,然後我將不得不拆分這100個股票,以便每次我知道客戶是什麼,以及他沒有。數字是關鍵。我知道我可以用數量工作,這會更容易,但數字必須留下來,他們將一個數據包與另一個數據包區分開來。現在它的工作原理是我展示了客戶擁有和選擇的產品清單並將其出售。他們想要的是我猜他們選擇了一個包,並且他們賣掉了一半,而且一半隻能保留適當的數字。 – MadBoy 2010-03-22 18:30:00

+0

好的,但我還是不明白問題的部分是什麼,或者只是談論如何解決問題?如果(stock.amount> newSold.amount)返回OutOfStockException,是否需要幫助如何更改對象/表中的數字?或者它是一個SQL問題,你不能分割股票? 或者是 – Niike2 2010-03-22 18:37:39

1

這聽起來像你應該把目前的驗證邏輯與更靈活的東西相提並論。也就是說,不要求數字匹配,而只需要餘額爲0或正數(也就是說,你不能出售你不擁有的東西)。爲了實現這一點,我會重構數據存儲,以便您可以將擁有的數量作爲單個值進行檢查,而不是將其與過去的事務進行匹配。

這可以很容易地沿着這些路線單一查詢來實現:

public void SellStock(int clientID, string stockSymbol, int quantityToSell) 
{ 
    using(var scope = new TransactionScope()) 
    { 
      // pseudo-sql for reducing client portfolio by quantity 
      update ClientStockPortfolio 
      set Quantity = Quantity - quantityToSell 
      where ID = clientID 
      and StockSymbol = stockSymbol 
      and Quantity >= quantityToSell 

      // log transaction history and update other tables as needed 
    } 
} 
+0

我也需要跟蹤股票數量。如果我不這樣做,那麼用戶可以兩次出售相同的數字(即使餘額是歐凱,數字也不會)。我想有一個價值而不是過去的交易是我必須實現的想法。 – MadBoy 2010-03-22 20:17:25

+0

你的平衡不應該足夠驗證嗎?我不認爲你的銀行試圖驗證你的提款對任何過去的存款:)這就是說,你可以有業務的具體要求進行額外的驗證。我建議保留一個事務日誌(在一個表中)並擴展where子句以進行必要的檢查(或者如果它們很難在SQL中實現或用作數據層,則在代碼中執行)。 – 2010-03-22 23:11:36

+0

好吧,銀行不關心我是否用100美元或20美元的錢。最後它是120美元。在私人股票中,你不能有2個數據包的數字相同。例如100只AB123到AB222的股票。你不能這樣做2次,而且你不能賣出那兩次。所以數字是不重要的。 – MadBoy 2010-03-23 09:32:13

相關問題