在应用程序中拆分私人股票市场包的问题

时间:2010-03-22 18:11:23

标签: c#

我写了一个小型应用程序来处理私人股票市场。我将所有数据存储在一个表中(以简化问题),并使用以下列:

  

ID,交易类型,数量,号码,号码,客户ID,日期
  1,Buy,100,AB1000,AB1099,5,2009-01-30
  2,Sell,100,AB1000,AB1099,5,2001-01-01
  3,购买,40,AB500,AB539,5,2010-01-01

对每个人来说都是如此。当我的用户想要获取客户所拥有的信息时,他会在BuySell上进行总结,确保数字匹配(在公开市场上没有股票编号,在私人网站上)有)。到目前为止,我的程序中无法部分销售任何东西。例如,如果我之前没有买过它,我不能卖出30只股票。因此,即使您的客户可能拥有40只股票,但由于数字不匹配,我只能卖出40只而不是30只。

我今天被问到是否可以改变它(他们改变了原来的要求),我想得到一些建议,如果它真的是正确的方法:

如果客户有100只股票然后试图只卖出30只数字AB1030 - AB1059我会在我的表格中插入这样的东西:

  

ID,TransactionType,数量,来自的号码,号码,客户ID
  4,Split-,100,AB1000,AB1099,5   5,Split +,30,AB1000,AB1029,5   6,Split +,30,AB1030,AB1059,5   7,Split +,40,AB1060,AB1099,5   8,卖出,30,AB1030,AB1059,5

我甚至无法向用户展示此分裂,以免过多地混淆他/她。作为一个补充,我不保留实时数据,我只保留历史记录,如果我想获得current information,我总是要重新计算所有内容。我是这样实现的,因为他们经常使用旧数据来检查旧日期等客户的当前状态。

你的建议是什么?这种方法是好的还是我应该完全改写它。请记住,系统已经存在,所以我不得不以某种方式迁移它。而且它不应该是一个完整的返工,因为我不会得到它最有可能的报酬,所以没有6个月的时间来解决它。

2 个答案:

答案 0 :(得分:1)

我们能否在您的业务逻辑中看到一些代码,以及您对买卖股票的限制? 我猜你不得不重新考虑在卖出不同金额时向你的客户说停止的方式。如果您的企业需要限制销售您尚未购买的商品,那么您可能还不能将其卖掉(还)?或者只有在适用特定规则时才能出售。

答案 1 :(得分: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
     }
}