2010-03-22 48 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

相关问题